k8s使用harbor私有仓库镜像 —— 筑梦之路

时间:2024-04-20 13:26:19

官方文档: Secret | Kubernetes

  ImagePullSecrets的设置是kubernetes机制的另一亮点,习惯于直接使用Docker Pull来拉取公共镜像,但非所有容器镜像都是公开的。此外,并不是所有的镜像仓库都允许匿名拉取,也就是说需要身份认证;
  kubernetes有一个secret记录类型,可用于配置镜像登陆凭证,secret的一个特定的类型:kubernetes.io/dockercfg 或者 kubernetes.io/dockerconfigjson。与所有kubernetes记录一样,Secrets通过名称被其他资源引用。此处是通过ImagePullSecrets来引用Secret的。

 

 创建Secrets资源

# Docker Config 创建 Secret

kubectl create secret docker-registry \
harbor-secret \
--docker-server=harbor.codemiracle.com \
--docker-username=admin \
--docker-password=Harbor12345

kubectl create secret docker-registry <secret名字> \
  --docker-server=<镜像仓库服务器> \
  --docker-username=<用户名> \
  --docker-password=<密码> \
  --docker-email=<邮箱地址>

# 使用 kubernetes.io/dockerconfigjson 类型的 Secret 来通过镜像仓库的身份验证

服务器上我们 docker login 一个镜像仓库,会生成一个文件:~/.docker/config.json>

kubectl create secret generic <secret名字> \
    --from-file=.dockerconfigjson=<path/to/.docker/config.json> \
    --type=kubernetes.io/dockerconfigjson

kubectl create secret generic harbor-secret \
    --from-file=.dockerconfigjson=~/.docker/config.json \
    --type=kubernetes.io/dockerconfigjson

查看secrets资源

kubectl get secrets

引入imagePullSecrets

apiVersion: v1
kind: Pod
metadata:
  name: private-reg
spec:
  containers:
  - name: private-reg-container
    image: <your-private-image>
  imagePullSecrets:
  - name: harbor-secret

注意:secret需要各自添加下namespace,只针对各自的命名空间生效 

apiVersion: v1
kind: Secret
metadata:
  name: harbor-secret 
  namespace: public
data:
  .dockerconfigjson: UmVhbGx5IHJlYWxseSByZWVlZWVlZWVlZWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGx5eXl5eXl5eXl5eXl5eXl5eXl5eSBsbGxsbGxsbGxsbGxsbG9vb29vb29vb29vb29vb29vb29vb29vb29vb25ubm5ubm5ubm5ubm5ubm5ubm5ubm5ubmdnZ2dnZ2dnZ2dnZ2dnZ2dnZ2cgYXV0aCBrZXlzCg==
type: kubernetes.io/dockerconfigjson

参考资料:

1.https://kubernetes.io/zh-cn/docs/concepts/containers/images/

2.https://kubernetes.io/zh-cn/docs/tasks/configure-pod-container/pull-image-private-registry/#registry-secret-existing-credentials