方案一: 通过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