将Harbor Image Registry Pull Secret添加到Kubernetes/OpenShift

时间:2020-02-23 14:30:14  来源:igfitidea点击:

现在,我已经配置了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>