- Related issues: #2176 [Enhancement] Air-gap operation: Support using a private registry for Rancher agent image
Category:
- Rancher Integration
Verification Steps
Environment Setup
- Use vagrant-pxe-harvester to create a harvester cluster.
- Create another VM
myregistry
and set it in the same virtual network. - In
myregistry
VM:- Install docker.
- Run following commands:
mkdir auth docker run \ --entrypoint htpasswd \ httpd:2 -Bbn testuser testpassword > auth/htpasswd mkdir -p certs openssl req \ -newkey rsa:4096 -nodes -sha256 -keyout certs/domain.key \ -addext "subjectAltName = DNS:myregistry.local" \ -x509 -days 365 -out certs/domain.crt sudo mkdir -p /etc/docker/certs.d/myregistry.local:5000 sudo cp certs/domain.crt /etc/docker/certs.d/myregistry.local:5000/domain.crt docker run -d \ -p 5000:5000 \ --restart=always \ --name registry \ -v "$(pwd)"/certs:/certs \ -v "$(pwd)"/registry:/var/lib/registry \ -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/domain.crt \ -e REGISTRY_HTTP_TLS_KEY=/certs/domain.key \ -v "$(pwd)"/auth:/auth \ -e "REGISTRY_AUTH=htpasswd" \ -e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" \ -e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd \ registry:2
- Set IP and domain in
/etc/hosts
to all VM (harvester andmyregistry
). Remember to change the IP.# vim /etc/hosts 192.168.0.50 myregistry.local
- Login, pull, and push nginx image in
myregsitry
VM:# username: testuser, password: testpassword docker login myregistry.local:5000 docker pull nginx:latest docker tag nginx:latest myregistry.local:5000:/nginx:latest docker push myregistry.local:5000/nginx:latest docker pull nginx:1.22 docker tag nginx:latest myregistry.local:5000:/nginx:1.22 docker push myregistry.local:5000/nginx:1.22
- Copy
certs/domain.crt
content inmyregistry
VM and paste it toadditional-ca
setting.
Test Plan 1
-
Update the Harvester containerd-registry setting to use private registry
{ "Mirrors": { "docker.io": { "Endpoints": [ "https://myregistry.local:5000" ], "Rewrites": null } }, "Configs": { "myregistry.local:5000": { "Auth": null, "TLS": { "CAFile": "", "CertFile": "", "KeyFile": "", "InsecureSkipVerify": false } } }, "Auths": null }
-
Open K9s -> search -> secrets -> containerd -> y
-
Check content in cattle-system/harvester-containerd-registry secret is changed.
-
Search jobs -> containerd -> l -> tail
-
Check there are new jobs to auto apply the new containerd-registry setting.
-
Apply following yaml in file
apiVersion: apps/v1 kind: Deployment metadata: name: myregistry-nginx spec: selector: matchLabels: image: myregistry-nginx template: metadata: labels: image: myregistry-nginx spec: containers: - imagePullPolicy: Always image: myregistry.local:5000/nginx:latest name: nginx
``` harvester-node-0:~ # kubectl apply -f deploy.yaml deployment.apps/myregistry-nginx created```
-
search deployments -> default namespace -> myregsistry-nginx -> describe -> shift + g
-
Check the nginx can be deployed.
Test Plan 2
- Click the
default value
to update the Harvester containerd-registry setting to default empty - In K9s
- Check content in cattle-system/harvester-containerd-registry secret is changed.
- Check there are new jobs to auto apply the new containerd-registry setting.
- Search secrets -> containerd -> e
- Clean registry.yaml data field
# Please edit the object below. Lines beginning with a '#' will be ignored, # and an empty file will abort the edit. If an error occurs while saving this file will be # reopened with the relevant failures. # apiVersion: v1 data: registries.yaml: "" kind: Secret metadata: creationTimestamp: "2022-10-04T08:51:47Z" name: harvester-containerd-registry namespace: cattle-system resourceVersion: "42088" uid: 8445547f-430a-474e-9783-dc6b16914eb7 type: Opaque
- Search -> deployments -> find nginx-1.2.2
- Check cannot pull nginx-1.2.2 image
Test Plan 3
- Add back the Harvester containerd-registry setting to use private registry again
- Check content in cattle-system/harvester-containerd-registry secret is changed.
- Check there are new jobs to auto apply the new containerd-registry setting.
- Check nginx 1.22 deployment is automatically back to running.
Expected Results
-
Update the Harvester containerd-registry setting with private registry, confirm can pull image and deploy nginx service correctly from private registry
-
Change the Harvester
containerd-registry
to default value, the nginx 1.22 cannot be deployed since no private registry assigned. -
Add back the the Harvester containerd-registry setting to private registry, confirm can pull image and deploy nginx service correctly from private registry