将Harbor Image Registry Pull Secret添加到Kubernetes/OpenShift
现在,我已经配置了Harbor图像注册表。如何使用拉密钥从Kubernetes/OpenShift上的Harbor注册表中拉图像? Harbor是经过CNCF认证的项目,有助于存储OCI图像和Helm图表。由于Harbor提供了身份验证系统和RBAC,我们可能必须在Kubernetes或者OpenShift集群中为用户或者机器人帐户添加拉式机密。
使用docker/podman登录到Workstation上的Harbor
首先从Docker CLI或者Podman CLI登录到Harbor注册表。如果注册表位于自定义端口(例如5000)上,则网址将类似于myregistry.example.com:5000。
如果Harbor注册表不安全。将其添加到不安全的注册表列表中。
--- Podman -- $sudo vim /etc/containers/registries.conf ... [registries.insecure] registries = ['myregistry.example.com'] --- Docker -- $sudo vim /etc/docker/daemon.json { "insecure-registries" : ["myregistry.example.com"] } $sudo systemctl restart docker $docker info
Docker登录:
$docker login myregistry.example.com Username: jkmutai Password: Login Succeeded!
Podman登录:
$docker login myregistry.example.com Username: jkmutai Password: Login Succeeded!
Docker将注册表访问信息存储在~/.docker/config.json下。
$cat ~/.docker/config.json
然后Podman将其存储在/run/user/UserID/containers/auth.json下
$cat /run/user/`id -u`/containers/auth.json
我们可能需要使用kubectl或者oc命令将json格式的访问凭据复制到服务器。
将Harbor Registry Secret添加到Kubernetes/OpenShift
接下来,我们需要在Kubernetes/OpenShift中将Harbor注册表的访问详细信息添加为秘密。
kubectl create secret generic harbor-registry-secret \ --from-file=.dockerconfigjson=./harbor-k8s.json \ --type=kubernetes.io/dockerconfigjson \ -n demo
其中:./harbor-k8s.json是Docker/Podman json文件的路径。相应地更改它。demo是要其中创建机密的名称空间的名称
确认秘密创建:
$oc get secrets harbor-registry-secret NAME TYPE DATA AGE harbor-registry-secret kubernetes.io/dockerconfigjson 1 30s
如果要解密添加的密钥以确认值,则可以使用以下命令:
kubectl get secret harbor-registry-secret \ --output="jsonpath={.data.\.dockerconfigjson}" | base64 --decode
确认我们可以从Harbor注册表中的镜像部署应用程序
将图像上传到Harbor注册表我们需要首先在Harbor中创建一个项目。
$podman pull docker.io/jmutai/kuard-amd64:blue $podman tag docker.io/jmutai/kuard-amd64:blue myregistry.example.com/myproject/kuard-amd64:blue $docker push myregistry.example.com/myproject/kuard-amd64:blue Getting image source signatures Copying blob bcf2f368fe23 done Copying blob 656e9c47289e done Copying config 1db936caa6 done Writing manifest to image destination Storing signatures
其中:myregistry.example.com是港口注册网址myproject是添加的用户有权访问的项目
为Kubernetes创建Pod部署列表。
$vim kuard-pod-health.yaml -- apiVersion: v1 kind: Pod metadata: name: kuard spec: imagePullSecrets: - name: harbor-registry-secret containers: - name: kuard image: myregistry.example.com/myproject/kuard-amd64:blue ports: - containerPort: 8080 name: http protocol: TCP resources: requests: cpu: "500m" memory: "128Mi" limits: cpu: "500m" memory: "256Mi"
创建一个Pod。
$kubectl apply -f kuard-pod-health.yaml -n <namespace> pod/kuard created
确认部署成功。
$kubectl get pod -n <namespace> NAME READY STATUS RESTARTS AGE kuard 1/1 Running 0 2m18s
如果未创建容器,请检查事件以了解原因。
$kubectl describe pod <podname> <namespace>