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' [email protected]
通過 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"