이 자습서에서는 Arc 지원 Kubernetes 클러스터에서 연결된 레지스트리 확장에 대한 다양한 배포 시나리오를 다룹니다. 연결된 레지스트리 확장이 설치되면 클라우드 레지스트리의 이미지를 온-프레미스 또는 원격 위치로 동기화할 수 있습니다.
잠시 시간을 내어 Arc 지원 Kubernetes가 개념적으로 작동하는 방식을 알아보세요.
연결된 레지스트리는 다양한 암호화 방법을 사용하여 안전하게 배포할 수 있습니다. 성공적인 배포를 보장하려면 빠른 시작 가이드에 따라 필수 구성 요소 및 기타 관련 정보를 검토합니다. 기본적으로 연결된 레지스트리는 HTTPS, ReadOnly 모드, 신뢰 배포 및 인증서 관리자 서비스로 구성됩니다. 시나리오에 따라 kustomization과 종속성을 필요한 만큼 추가할 수 있습니다.
Cert Manager 서비스란?
연결된 레지스트리 인증서 관리자는 Azure Arc 지원 Kubernetes 클러스터에서 연결된 레지스트리 확장에 대한 TLS 인증서를 관리하는 서비스입니다. 인증서 생성, 갱신 및 배포를 처리하여 연결된 레지스트리와 다른 구성 요소 간의 보안 통신을 보장합니다. 이 서비스는 연결된 레지스트리 배포의 일부로 설치하거나 클러스터에 이미 설치된 경우 기존 인증서 관리자를 사용할 수 있습니다.
Cert-Manager는 다양한 원본에서 TLS 인증서의 관리 및 발급을 자동화하는 오픈 소스 Kubernetes 추가 기능입니다. CA 서비스를 사용하여 만든 CA 풀에서 발급한 인증서의 수명 주기를 관리하여 만료되기 전에 유효하고 갱신되도록 합니다.
신뢰 배포란?
연결된 레지스트리 신뢰 배포는 클러스터 내의 연결된 레지스트리 서비스와 Kubernetes 클라이언트 간에 트러스트를 안전하게 분산하는 프로세스를 나타냅니다. 이는 인증서 관리자와 같은 CA(인증 기관)를 사용하여 TLS 인증서에 서명한 다음 레지스트리 서비스와 클라이언트 모두에 배포됩니다. 이렇게 하면 모든 엔터티가 서로를 안전하게 인증하고 Kubernetes 클러스터 내에서 안전하고 신뢰할 수 있는 환경을 유지할 수 있습니다.
필수 조건
이 자습서를 완전히 학습하려면 다음이 필요합니다.
- 빠른 시작에 따라 연결된 레지스트리 확장을 안전하게 배포합니다.
미리 설치된 cert-manager를 사용하여 연결된 레지스트리 확장 배포
이 자습서에서는 클러스터에서 미리 설치된 cert-manager 서비스를 사용하는 방법을 보여 줍니다. 이 설정을 사용하면 인증서 관리를 제어할 수 있으므로 제공된 단계에 따라 암호화를 사용하여 연결된 레지스트리 확장을 배포할 수 있습니다.
빠른 시작에서 az-k8s-extension-create 명령을 실행하고 cert-manager.enabled=true
및 cert-manager.install=false
매개 변수를 설정하여 cert-manager 서비스가 설치되고 사용하도록 설정되었는지 확인합니다.
az k8s-extension create --cluster-name myarck8scluster \
--cluster-type connectedClusters \
--extension-type Microsoft.ContainerRegistry.ConnectedRegistry \
--name myconnectedregistry \
--resource-group myresourcegroup \
--config service.clusterIP=192.100.100.1 \
--config cert-manager.install=false \
--config-protected-file protected-settings-extension.json
BYOC(Bring Your Own Certificate)를 사용하여 연결된 레지스트리 확장 배포
이 자습서에서는 클러스터에서 BYOC(사용자 고유의 인증서)를 사용하는 방법을 보여 줍니다. BYOC를 사용하면 사용자 고유의 공용 인증서 및 프라이빗 키 쌍을 사용하여 인증서 관리를 제어할 수 있습니다. 이 설정을 사용하면 제공된 단계에 따라 암호화를 사용하여 연결된 레지스트리 확장을 배포할 수 있습니다.
참고 항목
BYOC는 Kubernetes 노드에서 이미 신뢰할 수 있는 자체 인증서를 가져오는 고객에게 적용됩니다. 인증서를 신뢰하도록 노드를 수동으로 업데이트하지 않는 것이 좋습니다.
빠른 시작에 따라 공용 인증서 및 프라이빗 키 문자열 변수 + 값 쌍을 추가합니다.
- 연결된 레지스트리 서비스 IP를 SAN으로 사용하여 자체 서명된 SSL 인증서 만들기
mkdir /certs
openssl req -newkey rsa:4096 -nodes -sha256 -keyout /certs/mycert.key -x509 -days 365 -out /certs/mycert.crt -addext "subjectAltName = IP:<service IP>"
- 이러한 인증서 파일의 base64로 인코딩된 문자열 가져오기
export TLS_CRT=$(cat mycert.crt | base64 -w0)
export TLS_KEY=$(cat mycert.key | base64 -w0)
- JSON 형식의 비밀을 사용하는 보호된 설정 파일 예제:
참고 항목
공용 인증서 및 프라이빗 키 쌍은 base64 형식으로 인코딩되고 보호된 설정 파일에 추가되어야 합니다.
{
"connectionString": "[connection string here]",
"tls.crt": $TLS_CRT,
"tls.key": $TLS_KEY,
"tls.cacrt": $TLS_CRT
}
이제
cert-manager.enabled=false
및cert-manager.install=false
로 설정된 변수를 구성하여 공용 인증서 및 프라이빗 키 쌍 관리를 사용하여 HTTPS(TLS 암호화)를 사용하여 연결된 레지스트리 확장을 배포할 수 있습니다. 이러한 매개 변수를 사용하면 공용 인증서 및 프라이빗 키 쌍이 암호화에 대신 사용되므로 cert-manager가 설치되거나 활성화되지 않습니다.보호된 설정 파일을 편집한 후 배포를 위해 az-k8s-extension-create 명령을 실행합니다.
az k8s-extension create --cluster-name myarck8scluster \ --cluster-type connectedClusters \ --extension-type Microsoft.ContainerRegistry.ConnectedRegistry \ --name myconnectedregistry \ --resource-group myresourcegroup \ --config service.clusterIP=192.100.100.1 \ --config cert-manager.enabled=false \ --config cert-manager.install=false \ --config-protected-file protected-settings-extension.json
Kubernetes 비밀 관리를 사용하여 연결된 레지스트리 배포
이 자습서에서는 클러스터에서 Kubernetes 비밀을 사용하는 방법을 보여 줍니다. Kubernetes 비밀을 사용하면 클러스터 내의 Pod 간에 권한 있는 액세스를 안전하게 관리할 수 있습니다. 이 설정을 사용하면 제공된 단계에 따라 암호화를 사용하여 연결된 레지스트리 확장을 배포할 수 있습니다.
빠른 시작을 따라 Kubernetes TLS 비밀 문자열 변수 + 값 쌍을 추가합니다.
- 연결된 레지스트리 서비스 IP를 SAN으로 사용하여 자체 서명된 SSL 인증서 만들기
mkdir /certs
openssl req -newkey rsa:4096 -nodes -sha256 -keyout /certs/mycert.key -x509 -days 365 -out /certs/mycert.crt -addext "subjectAltName = IP:<service IP>"
- 이러한 인증서 파일의 base64로 인코딩된 문자열 가져오기
export TLS_CRT=$(cat mycert.crt | base64 -w0)
export TLS_KEY=$(cat mycert.key | base64 -w0)
- k8s 비밀 만들기
cat <<EOF | kubectl apply -f -
apiVersion: v1
kind: Secret
metadata:
name: k8secret
type: kubernetes.io/tls
data:
ca.crt: $TLS_CRT
tls.crt: $TLS_CRT
tls.key: $TLS_KEY
EOF
JSON 형식의 비밀을 사용하는 보호된 설정 파일 예제:
{ "connectionString": "[connection string here]", "tls.secret": “k8secret” }
이제 cert-manager.enabled=false
및 cert-manager.install=false
로 설정되는 변수를 구성하여 Kubernetes 비밀 관리를 사용하여 HTTPS(TLS 암호화)를 사용하여 연결된 레지스트리 확장을 배포할 수 있습니다. 이러한 매개 변수를 사용하면 Kubernetes 비밀이 암호화에 대신 사용되므로 cert-manager가 설치되거나 활성화되지 않습니다.
보호된 설정 파일을 편집한 후 배포를 위해 az-k8s-extension-create 명령을 실행합니다.
az k8s-extension create --cluster-name myarck8scluster \ --cluster-type connectedClusters \ --extension-type Microsoft.ContainerRegistry.ConnectedRegistry \ --name myconnectedregistry \ --resource-group myresourcegroup \ --config service.clusterIP=192.100.100.1 \ --config cert-manager.enabled=false \ --config cert-manager.install=false \ --config-protected-file protected-settings-extension.json
고유한 신뢰 배포를 사용하여 연결된 레지스트리를 배포하고 연결된 레지스트리의 기본 신뢰 배포를 사용하지 않도록 설정합니다.
이 자습서에서는 클러스터에서 신뢰 배포를 구성하는 방법을 보여 줍니다. 고유한 Kubernetes 비밀 또는 공용 인증서 및 프라이빗 키 쌍을 사용하는 동안 TLS 암호화, 고유 신뢰 배포를 사용하여 연결된 레지스트리 확장을 배포하고 연결된 레지스트리의 기본 신뢰 배포를 거부할 수 있습니다. 이 설정을 사용하면 제공된 단계에 따라 암호화를 사용하여 연결된 레지스트리 확장을 배포할 수 있습니다.
빠른 시작에 따라 Kubernetes 비밀 또는 공용 인증서와 보호된 설정 파일의 프라이빗 키 변수 + 값 쌍을 JSON 형식으로 추가합니다.
빠른 시작에서 az-k8s-extension-create 명령을 실행하고 연결된 레지스트리 신뢰 배포를 거부하도록
trustDistribution.enabled=false
,trustDistribution.skipNodeSelector=false
매개 변수를 설정합니다.az k8s-extension create --cluster-name myarck8scluster \ --cluster-type connectedClusters \ --extension-type Microsoft.ContainerRegistry.ConnectedRegistry \ --name myconnectedregistry \ --resource-group myresourcegroup \ --config service.clusterIP=192.100.100.1 \ --config trustDistribution.enabled=false \ --config cert-manager.enabled=false \ --config cert-manager.install=false \ --config-protected-file <JSON file path>
이러한 매개 변수를 사용하면 cert-manager가 설치되거나 사용하도록 설정되지 않으며 연결된 레지스트리 트러스트 배포가 적용되지 않습니다. 대신 연결된 레지스트리와 클라이언트 노드 간에 트러스트를 설정하기 위해 클러스터 제공 신뢰 배포를 사용합니다.
리소스 정리
배포된 연결된 레지스트리 확장을 삭제하여 해당 연결된 레지스트리 Pod 및 구성 설정을 제거합니다.
az-k8s-extension-delete 명령을 실행하여 연결된 레지스트리 확장을 삭제합니다.
az k8s-extension delete --name myconnectedregistry --cluster-name myarcakscluster \ --resource-group myresourcegroup \ --cluster-type connectedClusters
az acr connected-registry delete 명령을 실행하여 연결된 레지스트리를 삭제합니다.
az acr connected-registry delete --registry myacrregistry \ --name myconnectedregistry \ --resource-group myresourcegroup
연결된 레지스트리 확장 및 연결된 레지스트리를 삭제하면 연결된 모든 리소스 및 구성이 제거됩니다.