kubernetes之基于ServiceAccount拉取私有镜像

打印 上一主题 下一主题

主题 986|帖子 986|积分 2958

前面可以通过ImagPullPolicy和ImageullSecrets指定下载镜像的策略,ServiceAccount也可以基于spec.imagePullSecret字段附带一个由下载镜像专用的Secret资源组成的列表,用于在容器创建时,从某个私有镜像仓库下载镜像文件之前的服务认证。
1.创建Secrets资源

这里根据自己的实际去定义即可;一定要是对的地址和认证信息;否则无法pull/push
  1. root@ks-master01-10:~# kubectl create secret docker-registry \
  2. > aliyun-haitang-registry \
  3. > --docker-server=registry.cn-hangzhou.aliyuncs.com \
  4. > --docker-username=xxxxxxx\
  5. > --docker-password=xxxxxx
  6. secret/aliyun-haitang-registry created
复制代码
1.1查看Secrets
  1. root@ks-master01-10:~#  kubectl describe secret aliyun-haitang
  2. Name:         aliyun-haitang
  3. Namespace:    default
  4. Labels:       <none>
  5. Annotations:  <none>
  6. Type:  kubernetes.io/dockerconfigjson
  7. Data
  8. ====
  9. .dockerconfigjson:  140 bytes
复制代码
2.创建ServiceAccount

2.1不设置任何策略,测试是否能拉取私有仓库镜像

此处不配置任何镜像拉取策略,测试是否能拉取私有仓库镜像;
  1. root@ks-master01-10:~#  cat pod-serviceaccount-secret.yaml
  2. apiVersion: v1
  3. kind: Pod
  4. metadata:
  5.   name: stree-serviceaccount
  6. spec:
  7.   containers:
  8.   - name: stree
  9.     image: registry.cn-hangzhou.aliyuncs.com/lengyuye/stress:latest
复制代码
2.2查看Pod,处于ErrImage
  1. root@ks-master01-10:~# kubectl get pods
  2. NAME                                      READY   STATUS         RESTARTS       AGE
  3. stree-serviceaccount                      0/1     ErrImagePull   0              8s
复制代码
2.3describe查看Events

可以看到事件,是Docker认证的问题;
  1. root@ks-master01-10:~# kubectl describe pods stree-serviceaccount
  2. Events:
  3.   Type     Reason     Age               From               Message
  4.   ----     ------     ----              ----               -------
  5.   Normal   Scheduled  20s               default-scheduler  Successfully assigned default/stree-serviceaccount to ks-node02-12
  6.   Normal   BackOff    17s               kubelet            Back-off pulling image "registry.cn-hangzhou.aliyuncs.com/lengyuye/stress:latest"
  7.   Warning  Failed     17s               kubelet            Error: ImagePullBackOff
  8.   Normal   Pulling    2s (x2 over 19s)  kubelet            Pulling image "registry.cn-hangzhou.aliyuncs.com/lengyuye/stress:latest"
  9.   Warning  Failed     2s (x2 over 18s)  kubelet            Failed to pull image "registry.cn-hangzhou.aliyuncs.com/lengyuye/stress:latest": rpc error: code = Unknown desc = Error response from daemon: pull access denied for registry.cn-hangzhou.aliyuncs.com/lengyuye/stress, repository does not exist or may require 'docker login': denied: requested access to the resource is denied
  10.   Warning  Failed     2s (x2 over 18s)  kubelet            Error: ErrImagePull
复制代码
2.4创建ServiceAccount

aliyun-haitang是docker-registry类型的Secrets对象,由用户提前手动创建,它可以通过键值数据提供docker仓库服务器的地址,接入服务器的用户名,密码及用户的电子邮件信息等,认证通过后,引用ServiceAccount的Pod资源即可从指定的镜像仓库下载image。
  1. root@ks-master01-10:~# cat serviceaccount-imagepullsecret.yaml
  2. apiVersion: v1
  3. kind: ServiceAccount
  4. metadata:
  5.    name: imagepull-aliyun-sa
  6. imagePullSecrets:
  7. - name: aliyun-haitang
  8. root@ks-master01-10:~# kubectl apply -f serviceaccount-imagepullsecret.yaml
  9. serviceaccount/imagepull-aliyun-sa created
复制代码
2.5查看SA
  1. root@ks-master01-10:~# kubectl get sa imagepull-aliyun-sa -o yaml
  2. apiVersion: v1
  3. imagePullSecrets:
  4. - name: aliyun-haitang
  5. kind: ServiceAccount
  6. metadata:
  7.   annotations:
  8.     kubectl.kubernetes.io/last-applied-configuration: |
  9.       {"apiVersion":"v1","imagePullSecrets":[{"name":"aliyun-haitang"}],"kind":"ServiceAccount","metadata":{"annotations":{},"name":"imagepull-aliyun-sa","namespace":"default"}}
  10.   creationTimestamp: "2022-09-07T02:31:05Z"
  11.   name: imagepull-aliyun-sa
  12.   namespace: default
  13.   resourceVersion: "226300"
  14.   uid: fabc93b1-572c-4703-a2dd-465d4e0915cb
  15. secrets:
  16. - name: imagepull-aliyun-sa-token-vf67z
复制代码
2.6Pod引用ServiceAccount
  1. root@ks-master01-10:~# cat pod-serviceaccount-secret.yaml
  2. apiVersion: v1
  3. kind: Pod
  4. metadata:
  5.   name: stree-serviceaccount   
  6. spec:
  7.   serviceAccount: imagepull-aliyun-sa   # 这里则是创建的sa的名称
  8.   containers:
  9.   - name: stree
  10.     image: registry.cn-hangzhou.aliyuncs.com/lengyuye/stress:latest
  11. root@ks-master01-10:~/rbac# kubectl apply -f pod-serviceaccount-secret.yaml
  12. pod/stree-serviceaccount created
复制代码
3.创建Pod测试;

3.1查看Pod
  1. root@ks-master01-10:~# kubectl get pods
  2. NAME                                      READY   STATUS    RESTARTS       AGE
  3. stree-serviceaccount                      1/1     Running   0              8s
复制代码
3.2describe查看事件
  1. root@ks-master01-10:~# kubectl describe pods stree-serviceaccount
  2. Events:
  3.   Type    Reason     Age    From               Message
  4.   ----    ------     ----   ----               -------
  5.   Normal  Scheduled  3m36s  default-scheduler  Successfully assigned default/stree-serviceaccount to ks-node02-12
  6.   Normal  Pulling    3m35s  kubelet            Pulling image "registry.cn-hangzhou.aliyuncs.com/lengyuye/stress:latest"
  7.   Normal  Pulled     3m33s  kubelet            Successfully pulled image "registry.cn-hangzhou.aliyuncs.com/lengyuye/stress:latest" in 1.729555429s
  8.   Normal  Created    3m33s  kubelet            Created container stree
  9.   Normal  Started    3m33s  kubelet            Started container stree
复制代码
3.3查看详细信息
  1. root@ks-master01-10:~# kubectl get pods stree-serviceaccount -o yaml
  2.   imagePullSecrets:
  3.   - name: aliyun-haitang
  4.   nodeName: ks-node02-12
  5.   preemptionPolicy: PreemptLowerPriority
  6.   priority: 0
  7.   restartPolicy: Always
  8.   schedulerName: default-scheduler
  9.   securityContext: {}
  10.   serviceAccount: imagepull-aliyun-sa
  11.   serviceAccountName: imagepull-aliyun-sa
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

勿忘初心做自己

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表