k8s pod从私有仓库拉取镜像凭证配置

发布时间 2023-12-22 19:03:47作者: yuhaohao

方案一: 通过Docker配置文件创建secret

# 配置.docker/config.json文件,包含了与 Docker Hub 或其他私有仓库进行身份验证所需的凭据信息。
[root@mac-25 ~]# cat ~/.docker/config.json
{
	"auths": {
		"registry.test.com": {
			"auth": "dmlwZXIucm9ib3QuZG9ja2VyOlNUYW"
		}
    }
}
# 创建secret给pod使用
[root@mac-25 ~]# kubectl create secret generic <secret-name> --from-file=.dockerconfigjson=.docker/config.json --type=kubernetes.io/dockerconfigjson
# 这里,创建的secret可以在pod中通过imagePullSecrets引用

方案二: 手动创建secret

# 手动创建一个包含私有仓库凭据的 Secret 对象。这对于直接使用用户名和密码进行身份验证
[root@mac-25 ~]# kubectl create secret docker-registry <secret-name> \
  --docker-server=<registry-server> \
  --docker-username=<username> \
  --docker-password=<password> 
# 这里,创建的secret可以在pod中通过imagePullSecrets引用

方案三: 使用ServiceAccount

# Kubernetes 中的 Service Account 可以与 Secret 结合使用,实现对私有仓库的身份验证
# 可以看到sa中可以配置Image pull secrets
[root@mac-25 ~]# kubectl describe sa default
Name:                default
Namespace:           blueking
Labels:              <none>
Annotations:         <none>
Image pull secrets:  <none>
Mountable secrets:   default-token-pw6dq
Tokens:              default-token-pw6dq
Events:              <none>
# 1.创建一个ServiceAccount
[root@mac-25 ~]# kubectl create serviceaccount <service-account-name>

# 将 Service Account 与Secret 关联
[root@mac-25 ~]# kubectl patch serviceaccount <service-account-name> -p '{"imagePullSecrets": [{"name": "<secret-name>"}]}'
# 这里我们也可以通过手动edit来实现将 Service Account 与Secret 关联,注意去掉resourceVersion: xxx
[root@mac-25 ~]# kubectl edit serviceaccount/default
apiVersion: v1
kind: ServiceAccount
metadata:
  creationTimestamp: 2021-07-07T22:02:39Z
  name: default
  namespace: default
  uid: 052fb0f4-3d50-11e5-b066-42010af0d7b6
imagePullSecrets:
  - name: <secret-name>

# POD使用Service Account
[root@mac-25 ~]#  cat pod.yaml
apiVersion: v1
kind: Pod
metadata:
  name: mypod
spec:
  serviceAccountName: <service-account-name>
  containers:
  - name: mycontainer
    image: myprivate.registry.com/myimage:latest