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"