先创建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了。

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐