Kubernetes 原生给 Pod 添加 imagePullSecrets 有两种方式:
通过 Spec.imagePullSecrets 指定目标私有镜像仓库的 secret
通过 ServiceAccount 关联 目标私有镜像仓库的 secret
无论是哪种方式首先都需要创建一个私有镜像仓库的 secret, 可以通过如下命令创建:
kubectl create secret docker-registry regcred --docker-server=registry.cn-beijing.aliyuncs.com --docker-username=user-name --docker-password='password' --docker-email=foo@bar.com
通过 Spec.imagePullSecrets 指定目标私有镜像仓库的 secret 的方式示例如下:
- apiVersion: v1
- kind: Pod
- metadata:
- name: private-reg
- spec:
- containers:
- - name: private-reg-container
- image: <your-private-image>
- imagePullSecrets:
- - name: regcred
但是 Knative Serving 的 CRD 中没有设计 imagePullSecrets 这个字段, 也就是无法在 revisionTemplate 里面直接指定 imagePullSecrets. 但是我们可以在 RevisionTemplate 指定 serviceAccount. 只要把 imagePullSecrets 关联到 ServiceAccount 就可以了. 示例如下
- apiVersion: v1
- kind: ServiceAccount
- metadata:
- name: bj-image-pull
- secrets:
- - name: bj-image-pull-token-t99g6
- imagePullSecrets:
- - name: regcred
- apiVersion: serving.knative.dev/v1alpha1
- kind: Service
- metadata:
- name: helloworld-go
- namespace: default
- spec:
- runLatest:
- configuration:
- revisionTemplate:
- spec:
- serviceAccountName: "bj-image-pull"
- container:
- image: registry.cn-beijing.aliyuncs.com/cnstarter/helloworld-go:latest
- env:
- - name: TARGET
- value: "Go Sample v1"
参考文档
来源: https://yq.aliyun.com/articles/700595