IP로 설치된 Private-Registry(harbor) 도메인 수동 적용

가정

  • Private Registry, Control plane, Worker nodes는 Ubuntu20.04 환경에서 구성됩니다.

  • 쿠버네티스 버전은 v1.26 입니다.

  • 이미지 레지스트리 주소를 192.168.77.154 에서 regi.acornsoft.io 로 변경합니다.

IP
도메인

192.168.77.154

regi.acornsoft.io

Private Registry 작업

Private Registry IP 변경 및 디렉토리 생성

  • openssl.conf 파일에 도메인을 추가합니다.

$ sudo vi /var/lib/cubectl/cert/openssl.conf
# 예시
[ alt_names_registry ]
DNS.1 = localhost
DNS.2 = registry
DNS.3 = regi.acornsoft.io
IP.1 = 127.0.0.1
IP.2 = 192.168.77.154
  • 도메인 디렉토리를 생성합니다.

$ sudo mkdir /etc/docker/certs.d/regi.acornsoft.io

Private Registry 설정 파일 변경

  • harbor.yml의 hostname을 IP에서 도메인으로 변경합니다.

$ sudo sed -i 's/192.168.77.154/regi.acornsoft.io/g' /var/lib/cubectl/harbor/harbor.yml
# 예시
hostname: regi.acornsoft.io

변경사항 반영

  • install.sh 스크립트를 실행하여 변경 사항을 적용합니다.

$ cd /var/lib/cubectl/harbor/
$ sudo ./install.sh
  • install.sh 스크립트를 실행하는 대신 harbor 환경변수를 수정하고 harbor를 재시작해도 변경사항이 반영됩니다.

$ cd /var/lib/cubectl/harbor/common/config/core
$ vi env

# AS-IS
EXT_ENDPOINT=https://10.1.1.50

# TO-BE (접속될 접속주소, 예시:)
EXT_ENDPOINT=https://www.regi.acornsoft.io

Node 작업

공통 작업(Control plane, Worker nodes)

Private Registry IP 변경사항을 node에 반영

  • /etc/containerd/certs.d에 도메인 디렉토리를 생성한 후, /etc/containerd/certs.d/192.168.77.154/hosts.toml 파일을 복사합니다.

$ sudo mkdir -p /etc/containerd/certs.d/regi.acornsoft.io
$ sudo cp -r /etc/containerd/certs.d/192.168.77.154/* /etc/containerd/certs.d/regi.acornsoft.io
  • /etc/containerd/certs.d/regi.acornsoft.io/hosts.toml의 IP를 도메인으로 변경합니다.

$ sudo sed -i 's/192.168.77.154/regi.acornsoft.io/g' /etc/containerd/certs.d/regi.acornsoft.io/hosts.toml
  • /etc/containerd/config.toml의 IP를 도메인으로 변경합니다.

$ sudo sed -i 's/192.168.77.154/regi.acornsoft.io/g' /etc/containerd/config.toml
  • containerd를 재시작합니다.

$ sudo systemctl restart containerd
  • IP 인증서는 더이상 사용하지 않으므로 hosts.toml 파일에서 ca라인을 삭제합니다.

$ sudo sed -i '/ca =/d' /etc/containerd/certs.d/regi.acornsoft.io/hosts.toml
# 도메인주소로 변경하는 경우 ca 라인 삭제
server = "https://www.regi.acornsoft.io"

[host."https://www.regi.acornsoft.io"]
  • Addon, Coredns, Static Pods 및 기타 yaml파일에 대한 IP 주소를 도메인으로 변경합니다.

$ sudo find /etc/kubernetes -type f -exec sed -i 's/192.168.77.154/regi.acornsoft.io/g' {} +
# Control plane에서 IP가 변경되는 파일 목록

# Addon
/etc/kubernetes/addon/calico/calico.yaml
/etc/kubernetes/addon/metrics-server/metrics-server.yaml
# Static Pods
/etc/kubernetes/manifests/kube-apiserver.yaml
/etc/kubernetes/manifests/kube-controller-manager.yaml
/etc/kubernetes/manifests/kube-scheduler.yaml
# Coredns 및 기타 yaml
/etc/kubernetes/addon/test/nginx.yaml
/etc/kubernetes/addon/test/dnsutils.yaml
/etc/kubernetes/kubeadm.yaml
# Worker nodes에서 IP가 변경되는 파일 목록

# Static Pods
/etc/kubernetes/manifests/haproxy.yaml
  • 패키지 저장소 주소를 도메인으로 변경합니다.

$ sed -i 's/192.168.77.154/regi.acornsoft.io/g' /etc/apt/sources.list.d/local-repo.list
  • /etc/docker/certs.d/ 에 도메인 디렉토리를 생성합니다.

$ sudo mkdir /etc/docker/certs.d/regi.acornsoft.io

Control-plane 추가 작업

  • control-plane 에서는 calico와 metrics server를 업데이트하는 작업을 추가로 해줍니다.

$ kubectl apply -f /etc/kubernetes/addon/calico/calico.yaml
$ kubectl apply -f /etc/kubernetes/addon/metrics-server/metrics-server.yaml
  • kube-proxy daemonset 이미지 주소를 도메인으로 변경합니다.

$ kubectl edit daemonset -n kube-system kube-proxy
# 예시
image: regi.acornsoft.io/registry.k8s.io/kube-proxy:v1.26.7
  • coredns deployment 이미지 주소를 도메인으로 변경합니다.

$ kubectl edit deployment -n kube-system coredns
# 예시
image: regi.acornsoft.io/docker.io/coredns/coredns:1.9.3
  • kubelet을 재시작해줍니다.

$ sudo systemctl restart kubelet

확인

  • 컨테이너 이미지를 확인합니다. 이미지가 모두 올라오기까지 몇 분 소요될 수 있습니다.

$ sudo crictl images
# 예시
ubuntu@master-1:~$ sudo crictl images
IMAGE                                                          TAG                 IMAGE ID            SIZE
regi.acornsoft.io/docker.io/calico/cni                         v3.26.1             9dee260ef7f59       93.4MB
192.168.77.154/docker.io/calico/cni                            v3.26.1             9dee260ef7f59       93.4MB
regi.acornsoft.io/docker.io/calico/node                        v3.26.1             8065b798a4d67       86.6MB
192.168.77.154/docker.io/calico/node                           v3.26.1             8065b798a4d67       86.6MB
regi.acornsoft.io/registry.k8s.io/kube-apiserver               v1.26.7             6ac727c486d08       36.1MB
192.168.77.154/registry.k8s.io/kube-apiserver                  v1.26.7             6ac727c486d08       36.1MB
regi.acornsoft.io/registry.k8s.io/kube-controller-manager      v1.26.7             17314033c0a0b       32.8MB
192.168.77.154/registry.k8s.io/kube-controller-manager         v1.26.7             17314033c0a0b       32.8MB
regi.acornsoft.io/registry.k8s.io/kube-proxy                   v1.26.7             1e7eac3bc5c0b       21.8MB
192.168.77.154/registry.k8s.io/kube-proxy                      v1.26.7             1e7eac3bc5c0b       21.8MB
regi.acornsoft.io/registry.k8s.io/kube-scheduler               v1.26.7             c1902187a39f8       17.8MB
192.168.77.154/registry.k8s.io/kube-scheduler                  v1.26.7             c1902187a39f8       17.8MB
regi.acornsoft.io/registry.k8s.io/pause                        3.9                 e6f1816883972       319kB
192.168.77.154/registry.k8s.io/pause                           3.9                 e6f1816883972       319kB
192.168.77.154/docker.io/coredns/coredns                       1.9.3               5185b96f0becf       14.8MB
192.168.77.154/registry.k8s.io/metrics-server/metrics-server   v0.6.1              e57a417f15d36       28.1MB

참고: Private Registry IP를 새로운 서버의 IP로 변경하는 경우에는 cubectl update 명령서를 사용하십시오.

Last updated