将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>

