0
点赞
收藏
分享

微信扫一扫

添加secret从私有仓库拉取镜像

Log in toprivate registry

Use the docker tool to log in toprivate registry.

docker login

The login process creates or updates a config.json file that holds an authorization token.View the config.json file:  cat ~/.docker/config.json

Create a Secret based on existing credentials

If you already ran docker login, you can copy that credential into Kubernetes:

kubectl create secret generic regcred \    --from-file=.dockerconfigjson=<path/to/.docker/config.json> \    --type=kubernetes.io/dockerconfigjson

If you need more control (for example, to set a namespace or a label on the new secret) then you can customise the Secret before storing it. Be sure to:

①set the name of the data item to .dockerconfigjson

②base64 encode the Docker configuration file and then paste that string, unbroken as the value for field data[".dockerconfigjson"]

③set type to kubernetes.io/dockerconfigjson

kubectl create secret generic harborsecret \

    --from-file=.dockerconfigjson=/root/.docker/config.json \

    --type=kubernetes.io/dockerconfigjson

Create a Secret by providing credentials on the command line

Create this Secret, naming it regcred:

kubectl create secret docker-registry regcred \

--docker-server=<your-registry-server>\

--docker-username=<your-name> \

--docker-password=<your-pword> \

--docker-email=<your-email>

Where:

<your-registry-server> is your Private Docker Registry FQDN. Use https://index.docker.io/v1/ for DockerHub.

<your-name> is your Docker username.

<your-pword> is your Docker password.

<your-email> is your Docker email.

kubectl create secret docker-registry harborsecret \

--docker-server='10.16.100.89:81' \

--docker-username='bip' \

--docker-password='Harbor12345'\

--docker-email='admin@yonyou.com'

You have successfully set your Docker credentials in the cluster as a Secret called regcred.

Inspecting the Secret regcred

To understand the contents of the regcred Secret, start by viewing the Secret in YAML format:

kubectl get secret regcred --output=yaml

The output is similar to this:

apiVersion: v1

kind: Secret

metadata:  

...  

name: regcred  

...

data:  

.dockerconfigjson: eyJodHRwczovL2luZGV4L ... J0QUl6RTIifX0=

type: kubernetes.io/dockerconfigjson

The value of the .dockerconfigjson field is a base64 representation of your Docker credentials.

To understand what is in the .dockerconfigjson field, convert the secret data to a readable format:

kubectl get secret regcred --output="jsonpath={.data.\.dockerconfigjson}" | base64 --decode

The output is similar to this:

{"auths":{"your.private.registry.example.com":{"username":"janedoe","password":"xxxxxxxxxxx","email":"jdoe@example.com","auth":"c3R...zE2"}}}

To understand what is in the auth field, convert the base64-encoded data to a readable format:

echo "c3R...zE2" | base64 --decode

The output, username and password concatenated with a :, is similar to this:

janedoe:xxxxxxxxxxx

The Secret contains the authorization token similar to your local ~/.docker/config.json file.

You have successfully set your Docker credentials as a Secret called regcred in the cluster.

Create a Pod that uses your Secret

Here is a manifest for an example Pod that needs access to your Docker credentials in regcred:

pods/private-reg-pod.yaml

apiVersion: v1

kind: Pod

metadata:

  name: private-reg

spec:

  containers:

  - name: private-reg-container

    image: <your-private-image>

  imagePullSecrets:

  - name: regcred

In file my-private-reg-pod.yaml, replace <your-private-image> with the path to an image in a private registry such as:

your.private.registry.example.com/janedoe/jdoe-private:v1

To pull the image from the private registry, Kubernetes needs credentials. The imagePullSecrets field in the configuration file specifies that Kubernetes should get the credentials from a Secret named regcred.

Create a Pod that uses your Secret, and verify that the Pod is running:

kubectl apply -f my-private-reg-pod.yaml

kubectl get pod private-reg

Note: To use image pull secrets for a Pod (or a Deployment, or other object that has a pod template that you are using), you need to make sure that the appropriate Secret does exist in the right namespace. The namespace to use is the same namespace where you defined the Pod.

举报

相关推荐

0 条评论