K8S创建拉镜像secret或service account
kubectl create secret docker-registry <secret名称(docker-registry-secret)> --namespace=<命名空间名称> --docker-username=<镜像仓库用户名> --docker-password=<镜像仓库密码> --docker-server=<镜像仓库地址&
先创建docker-registry类型的secret
kubectl create secret docker-registry <secret名称(registrykey)> --namespace=<命名空间名称> --docker-username=<镜像仓库用户名> --docker-password=<镜像仓库密码> --docker-server=<镜像仓库地址>
两种使用方式: 直接使用secret和使用serviceAccount。直接使用的话每个deployment都需要配置。使用serviceAccount可以每个都配置,也可以使用 default serviceAccount的话就会默认注入。下面分别说明。
直接使用secret
添加secret
imagePullSecrets:
- name: registrykey
yaml示例
apiVersion: apps/v1
kind: Deployment
metadata:
name: demo
namespace: default
spec:
selector:
matchLabels:
app: demo
replicas: 3
progressDeadlineSeconds: 600
revisionHistoryLimit: 10
template:
metadata:
labels:
app: demo
spec:
imagePullSecrets:
- name: registrykey
containers:
- name: demo
image: harbor.chai.cn/demo/nginx:latest
使用serviceaccount
先创建serviceaccount,关联secret
apiVersion: v1
kind: ServiceAccount
metadata:
name: docker-image
namespace: default
imagePullSecrets:
- name: registrykey
使用serviceaccount
apiVersion: apps/v1
kind: Deployment
metadata:
name: demo
spec:
selector:
matchLabels:
app: demo
replicas: 2
template:
metadata:
labels:
app: demo
spec:
serviceAccount: docker-image
containers:
- name: docker-registry-test
image: harbor.chai.cn/demo/nginx:latest
imagePullPolicy: IfNotPresent
ports:
- containerPort: 80
name: docker-image-test
使用default service account
当你创建 Pod 时,如果没有指定服务账户,Pod 会被指定给命名空间中的 default service account。如果创建pod时没指定image pull secrets,默认会将default service account的image pull secrets注入到pod。
我们可以查看命名空间下的default service account
#kubectl get sa
NAME SECRETS AGE
default 1 8d
# kubectl describe sa
Name: default
Namespace: default
Labels: <none>
Annotations: <none>
Image pull secrets: <none>
Mountable secrets: default-token-l7r3r
Tokens: default-token-l7r3r
Events: <none>
通过上边的命令我们可以发现默认Image pull secrets: 值为空。
所以我们可以将创建好的docker registry secret用作 default service account 的imagePullSecret。
#kubectl patch serviceaccount default -p '{"imagePullSecrets": [{"name": "registrykey"}]}'
# kubectl describe sa
Name: default
Namespace: default
Labels: <none>
Annotations: <none>
Image pull secrets: registrykey
Mountable secrets: default-token-l7r3r
Tokens: default-token-l7r3r
Events: <none>
通过以上的配置,新的pod将使用这个默认的default service account的Image pull secrets去进行认证。不用每一个deployment都去设置一个secret了。
更多推荐
所有评论(0)