k8s 支持私有镜像 从私有仓库拉取镜像
方法一:yml 文件加入密钥参数。
详情信息参见官方文档 使用私有仓库。
创建 docker-registry 类型的 secret
kubectl create secret docker-registry regsecret --docker-server=registry-internal.cn-hangzhou.aliyuncs.com --docker-username=abc@aliyun.com --docker-password=xxxxxx --docker-email=abc@aliyun.com
其中:
regsecret: 指定密钥的键名称,可自行定义。
--docker-server:指定 Docker 仓库地址。
--docker-username: 指定 Docker 仓库用户名。
--docker-password:指定 Docker 仓库登录密码。
--docker-email:指定邮件地址(选填)
yml 文件加入密钥参数。
containers: - name: foo image: registry-internal.cn-hangzhou.aliyuncs.com/abc/test:1.0 imagePullSecrets: - name: regsecret
其中:
imagePullSecrets 是声明拉取镜像时需要指定密钥。
regsecret 必须和上面生成密钥的键名一致。
image 中的 Docker 仓库名称必须和 --docker-server 中的 Docker 仓库名一致。
方法二:实现无密钥编排
为了避免每次使用私有镜像部署时,都需要引用密钥,您可将secret添加到namespace的default service account中
详情信息参见官方文档:Add ImagePullSecrets to a service account
首先创建 docker-registry 类型的 secret
按照上面的方法即可
创建一个sa.yaml配置文件,将服务账号default的配置导入到该文件中。
本例中采用手动配置的方式,修改命名空间的默认服务帐户default,从而将此secret作为imagePullSecret。
kubectl get serviceaccounts default -o yaml > ./sa.yaml cat sa.yaml apiVersion: v1 kind: ServiceAccount metadata: creationTimestamp: 2015-08-07T22:02:39Z name: default namespace: default resourceVersion: "243024" ##注意该项 selfLink: /api/v1/namespaces/default/serviceaccounts/default uid: 052fb0f4-3d50-11e5-b066-42010af0d7b6 secrets: - name: default-token-uudgeoken-uudge
执行vim sa.yaml命令,删除resourceVersion,并增加拉取镜像的密钥配置项imagePullSecrets。修改后的配置如下。
apiVersion: v1 kind: ServiceAccount metadata: creationTimestamp: 2015-08-07T22:02:39Z name: default namespace: default selfLink: /api/v1/namespaces/default/serviceaccounts/default uid: 052fb0f4-3d50-11e5-b066-42010af0d7b6 secrets: - name: default-token-uudge imagePullSecrets: ##增加该项 - name: regsecret
随后用 sa.yaml配置文件替换default的服务账号配置。
kubectl replace serviceaccount default -f ./sa.yaml serviceaccount "default" replaced
以一个tomcat编排为例,执行kubectl create -f 命令创建。
apiVersion: apps/v1beta2 # for versions before 1.8.0 use apps/v1beta1 kind: Deployment metadata: name: tomcat-deployment labels: app: tomcat spec: replicas: 1 selector: matchLabels: app: tomcat template: metadata: labels: app: tomcat spec: containers: - name: tomcat image: registry-internal.cn-hangzhou.aliyuncs.com/abc/test:1.0 #替换为您自己的私有镜像地址 ports: - containerPort: 8080
若配置正常,Pod会启动成功。然后执行 kubectl get pod tomcat-xxx -o yaml 命令,你可看到以下配置项。
spec: imagePullSecrets: - nameregsecretey
扩展:创建 docker-registry 类型的 secret 方法
除了上面方法创建 docker-registry 以外,下面方法亦可以的
方法二
首先登录
# docker login -u xxx -p xxx registry.cn-beijing.aliyuncs.com
Login Succeeded
生成密钥
# cat /root/.docker/config.json | base64
ewoJImF1dGhzIjogewoJCSJyZWdpc3RyeS5jbi1zaGFuZ2hhaS5hbGl5dW5jcy5jb20iOiB7CgkJ
CSJhdXRoIjogIlkzaDZabUpBYkdWMGVtZHZMbU52YlM1amJqcEVlbU40UURrMk9ESXkiCgkJfQoJ
fQp9Cg====
创建配置清单
# cat registry-pull-secret.yaml
apiVersion: v1 kind: Secret metadata: name: registry-vpc namespace: newns data: .dockerconfigjson: ewoJImF1dGhzIjogewoJCSJyZWdpc3RyeS5jbi1zaGFuZ2hhaS5hbGl5dW5jcy5jb20iOiB7CgkJCSJhdXRoIjogIlkzaDZabUpBYkdWMGVtZHZMbU52YlM1amJqcEVlbU40UURrMk9ESXkiCgkJfQoJfQp9Cg== type: kubernetes.io/dockerconfigjson
创建 secret
kubectl create -f registry-pull-secret.yaml
共 0 条评论