9.10. Red Hat OpenShift용 cert-manager Operator를 Istio-CSR과 통합
Red Hat OpenShift용 cert-manager Operator는 Red Hat OpenShift Service Mesh 또는 Istio에서 워크로드 및 제어 플레인 구성 요소의 보안을 강화하는 지원을 제공합니다. 여기에는 cert-manager 발급자를 사용하여 서명, 전달 및 갱신되는 상호 TLS(mTLS)를 활성화하는 인증서에 대한 지원이 포함됩니다. Red Hat OpenShift 관리형 Istio-CSR 에이전트용 cert-manager Operator를 사용하여 Istio 워크로드와 제어 플레인 구성요소를 보호할 수 있습니다.
이 Istio-CSR 통합을 통해 Istio는 이제 Red Hat OpenShift용 cert-manager 운영자로부터 인증서를 얻을 수 있어 보안 및 인증서 관리가 간소화됩니다.
9.10.1. Red Hat OpenShift용 cert-manager Operator를 통한 Istio-CSR 에이전트 설치 링크 복사링크가 클립보드에 복사되었습니다!
9.10.1.1. Istio-CSR 에이전트에 대한 루트 CA 발급자 생성 링크 복사링크가 클립보드에 복사되었습니다!
이 절차를 사용하여 Istio-CSR 에이전트에 대한 루트 CA 발급자를 만듭니다.
ACME 발급자는 지원되지 않으므로, 다른 지원되는 발급자를 사용할 수 있습니다. 자세한 내용은 "Red Hat OpenShift 발급자 공급자를 위한 cert-manager 운영자"를 참조하세요.
프로세스
발급자및인증서객체를 정의하는 YAML 파일을 만듭니다.issuer.yaml파일 예apiVersion: cert-manager.io/v1 kind: Issuer1 metadata: name: selfsigned namespace: <istio_project_name>2 spec: selfSigned: {} --- apiVersion: cert-manager.io/v1 kind: Certificate metadata: name: istio-ca namespace: <istio_project_name> spec: isCA: true duration: 87600h # 10 years secretName: istio-ca commonName: istio-ca privateKey: algorithm: ECDSA size: 256 subject: organizations: - cluster.local - cert-manager issuerRef: name: selfsigned kind: Issuer3 group: cert-manager.io --- apiVersion: cert-manager.io/v1 kind: Issuer4 metadata: name: istio-ca namespace: <istio_project_name>5 spec: ca: secretName: istio-ca
검증
다음 명령을 실행하여 발급자가 생성되어 사용할 준비가 되었는지 확인하세요.
$ oc get issuer istio-ca -n <istio_project_name>출력 예
NAME READY AGE istio-ca True 3m
9.10.1.2. IstioCSR 사용자 정의 리소스 생성 링크 복사링크가 클립보드에 복사되었습니다!
Red Hat OpenShift용 cert-manager Operator를 통해 Istio-CSR 에이전트를 설치하려면 이 절차를 따르세요.
사전 요구 사항
-
cluster-admin권한이 있는 클러스터에 액세스할 수 있습니다. - Istio-CSR 기능을 활성화했습니다.
Istio-CSR 에이전트에 대한 인증서를 생성하는 데 필요한
Issuer또는ClusterIssuer리소스를 생성했습니다.참고발급자리소스를 사용하는 경우 Red Hat OpenShift Service Mesh 또는Istiod네임스페이스에발급자및인증서리소스를 만듭니다. 인증서 요청은 동일한 네임스페이스에서 생성되며, 역할 기반 액세스 제어(RBAC)가 이에 따라 구성됩니다.
프로세스
다음 명령을 실행하여 Istio-CSR을 설치하기 위한 새 프로젝트를 만듭니다. Istio-CSR을 설치하기 위한 기존 프로젝트가 있는 경우 이 단계를 건너뜁니다.
$ oc new-project <istio_csr_project_name>Red Hat OpenShift의 cert-manager Operator가 관리하는 Istio-CSR 에이전트가 Istio 워크로드와 제어 평면 인증서 서명 요청을 처리할 수 있도록
IstioCSR사용자 정의 리소스를 생성합니다.참고한 번에 하나의
IstioCSR사용자 정의 리소스(CR)만 지원됩니다. 여러 개의IstioCSRCR이 생성된 경우 하나만 활성화됩니다.IstioCSR의상태하위 리소스를 사용하여 리소스가 처리되지 않았는지 확인합니다.-
여러 개의
IstioCSRCR이 동시에 생성되는 경우 아무것도 처리되지 않습니다. -
여러 개의
IstioCSRCR이 순차적으로 생성되는 경우 첫 번째 CR만 처리됩니다. -
새로운 요청이 거부되는 것을 방지하려면 처리되지 않은
IstioCSRCR을 삭제하세요. -
Operator는
IstioCSR에 대해 생성된 객체를 자동으로 제거하지 않습니다. 활성IstioCSR리소스가 삭제되고 이전 배포를 제거하지 않고 다른 네임스페이스에 새 리소스가 생성되는 경우 여러istio-csr배포가 활성 상태로 유지될 수 있습니다. 이런 동작은 권장되지 않으며 지원되지도 않습니다.
IstioCSR객체를 정의하는 YAML 파일을 만듭니다.IstioCSRCR 예시apiVersion: operator.openshift.io/v1alpha1 kind: IstioCSR metadata: name: default namespace: <istio_csr_project_name> spec: istioCSRConfig: certManager: issuerRef: name: istio-ca1 kind: Issuer2 group: cert-manager.io istiodTLSConfig: trustDomain: cluster.local istio: namespace: <istio_project_name>다음 명령을 실행하여
IstioCSR사용자 정의 리소스를 만듭니다.$ oc create -f IstioCSR.yaml
-
여러 개의
검증
다음 명령을 실행하여 Istio-CSR 배포가 준비되었는지 확인하세요.
$ oc get deployment -n <istio_csr_project_name>출력 예
NAME READY UP-TO-DATE AVAILABLE AGE cert-manager-istio-csr 1/1 1 1 24s다음 명령을 실행하여 Istio-CSR 포드가 실행 중인지 확인하세요.
$ oc get pod -n <istio_csr_project_name>출력 예
NAME READY STATUS RESTARTS AGE cert-manager-istio-csr-5c979f9b7c-bv57w 1/1 Running 0 45s다음 명령을 실행하여 Istio-CSR 포드가 로그에 오류를 보고하지 않는지 확인하세요.
$ oc -n <istio_csr_project_name> logs <istio_csr_pod_name>다음 명령을 실행하여 Red Hat OpenShift Pod용 cert-manager Operator가 오류를 보고하지 않는지 확인하세요.
$ oc -n cert-manager-operator logs <cert_manager_operator_pod_name>
9.10.2. IstioCSR 사용자 정의 리소스 사용자 정의 링크 복사링크가 클립보드에 복사되었습니다!
IstioCSR 사용자 정의 리소스(CR)를 수정하여 Istio 워크로드가 cert-manager Operator와 상호 작용하는 방식을 정의할 수 있습니다.
9.10.2.1. istio-csr 구성 요소에 대한 로그 수준 설정 링크 복사링크가 클립보드에 복사되었습니다!
istio-csr 구성 요소의 로그 수준을 설정하여 로그 메시지의 자세한 내용과 형식을 제어할 수 있습니다.
사전 요구 사항
-
cluster-admin권한이 있는 클러스터에 액세스할 수 있습니다. -
IstioCSR사용자 정의 리소스(CR)를 생성했습니다.
프로세스
다음 명령을 실행하여
IstioCSRCR을 편집합니다.oc edit istiocsrs.operator.openshift.io default -n <istio_csr_project_name>1 - 1
<istio_csr_project_name>을IstioCSRCR을 생성한 네임스페이스로 바꾸세요.
spec.istioCSRConfig섹션에서 로그 수준과 형식을 구성합니다.로그 수준 설정을 위한 IstioCSR CR 구성 샘플
apiVersion: operator.openshift.io/v1alpha1 kind: IstioCSR ... spec: istioCSRConfig: logFormat: text1 logLevel: 22 # ...- 변경 사항을 적용하려면 편집기를 저장하고 닫으세요. 변경 사항이 적용된 후 cert-manager 연산자는 istio-csr 피연산자에 대한 로그 구성을 업데이트합니다.
9.10.2.2. CA 번들 배포를 위한 네임스페이스 선택기 구성 링크 복사링크가 클립보드에 복사되었습니다!
Istio-CSR 에이전트는 CA 번들을 포함하는 istio-ca-root-cert ConfigMap을 만들고 업데이트합니다. 서비스 메시의 워크로드는 이 CA 번들을 사용하여 Istio 제어 평면에 대한 연결을 검증합니다. Istio-CSR 에이전트가 이 ConfigMap을 생성하는 네임스페이스를 지정하기 위해 네임스페이스 선택기를 구성할 수 있습니다. 선택기를 구성하지 않으면 Istio-CSR 에이전트가 모든 네임스페이스에 ConfigMap을 생성합니다.
사전 요구 사항
-
cluster-admin권한이 있는 클러스터에 액세스할 수 있습니다. -
IstioCSR사용자 정의 리소스(CR)를 생성했습니다.
프로세스
다음 명령을 실행하여
IstioCSRCR을 편집합니다.oc edit istiocsrs.operator.openshift.io default -n <istio_csr_project_name>1 - 1
<istio_csr_project_name>을IstioCSRCR을 생성한 네임스페이스로 바꾸세요.
spec.istioCSRConfig.istioDataPlaneNamespaceSelector섹션을 구성하여 네임스페이스 선택기를 설정합니다.네임스페이스 선택기를 사용한 IstioCSR CR 구성 샘플
apiVersion: operator.openshift.io/v1alpha1 kind: IstioCSR ... spec: istioCSRConfig: istioDataPlaneNamespaceSelector: maistra.io/member-of=istio-system1 # ...- 1
maistra.io/member-of=istio-system을서비스 메시의 네임스페이스를 식별하는 레이블 키와 값으로 바꿉니다.<키>=<값>형식을 사용하세요.
참고istio-csr 구성 요소는 구성된 선택기와 일치하지 않는 네임스페이스의
ConfigMap객체를 삭제하거나 관리하지 않습니다.IstioCSRCR을 배포한 후 선택기를 생성하거나 업데이트하거나 네임스페이스에서 레이블을 제거하는 경우 충돌을 방지하기 위해 이러한ConfigMap객체를 수동으로 삭제해야 합니다.다음 명령을 실행하면 선택기와 일치하는 네임스페이스에 없는
ConfigMap객체를 나열할 수 있습니다. 이 예에서 선택자는maistra.io/member-of=istio-system입니다.printf "%-25s %10s\n" "ConfigMap" "Namespace"; \ for ns in $(oc get namespaces -l "maistra.io/member-of!=istio-system" -o=jsonpath='{.items[*].metadata.name}'); do \ oc get configmaps -l "istio.io/config=true" -n $ns --no-headers -o jsonpath='{.items[*].metadata.name}{"\t"}{.items[*].metadata.namespace}{"\n"}' --ignore-not-found; \ done- 변경 사항을 적용하려면 편집기를 저장하고 닫으세요. 변경 사항이 적용된 후 Red Hat OpenShift용 cert-manager Operator는 istio-csr 피연산자에 대한 네임스페이스 선택기 구성을 업데이트합니다.
9.10.2.3. Istio 서버에 대한 CA 인증서 구성 링크 복사링크가 클립보드에 복사되었습니다!
Istio 워크로드에서 Istio 서버 인증서를 확인하는 데 사용되는 CA 번들이 포함된 ConfigMap을 구성할 수 있습니다. 구성되지 않은 경우 Red Hat OpenShift용 cert-manager Operator는 구성된 발급자와 Istio 인증서가 포함된 Kubernetes Secret에서 CA 인증서를 찾습니다.
사전 요구 사항
-
cluster-admin권한이 있는 클러스터에 액세스할 수 있습니다. -
IstioCSR사용자 정의 리소스(CR)를 생성했습니다.
프로세스
다음 명령을 실행하여
IstioCSRCR을 편집합니다.oc edit istiocsrs.operator.openshift.io default -n <istio_csr_project_name>1 - 1
<istio_csr_project_name>을IstioCSRCR을 생성한 네임스페이스로 바꾸세요.
spec.istioCSRConfig.certManager섹션을 편집하여 CA 번들을 구성합니다.CA 번들 구성을 사용한
IstioCSRCR 샘플apiVersion: operator.openshift.io/v1alpha1 kind: IstioCSR ... spec: istioCSRConfig: certManager: istioCACertificate: key: <key_in_the_configmap>1 name: <configmap_name>2 namespace: <configmap_namespace>3 참고CA 인증서가 순환될 때마다 최신 인증서로
ConfigMap을수동으로 업데이트해야 합니다.-
변경 사항을 적용하려면 편집기를 저장하고 닫으세요. 변경 사항이 적용된 후 cert-manager 연산자는
istio-csr피연산자에 대한 CA 번들을 업데이트합니다.
9.10.3. Red Hat OpenShift용 cert-manager Operator가 관리하는 Istio-CSR 에이전트 제거 링크 복사링크가 클립보드에 복사되었습니다!
Red Hat OpenShift용 cert-manager Operator가 관리하는 Istio-CSR 에이전트를 제거하려면 이 절차를 사용하세요.
사전 요구 사항
-
cluster-admin권한이 있는 클러스터에 액세스할 수 있습니다. - Istio-CSR 기능을 활성화했습니다.
-
IstioCSR사용자 정의 리소스를 생성했습니다.
프로세스
다음 명령을 실행하여
IstioCSR사용자 정의 리소스를 제거합니다.$ oc -n <istio_csr_project_name> delete istiocsrs.operator.openshift.io default관련 리소스를 제거합니다.
중요Red Hat OpenShift Service Mesh 또는 Istio 구성 요소의 중단을 방지하려면 다음 리소스를 제거하기 전에 구성 요소가 Istio-CSR 서비스 또는 Istio에 대해 발급된 인증서를 참조하지 않는지 확인하세요.
다음 명령을 실행하여 클러스터 범위 리소스를 나열하고 나중에 참조할 수 있도록 나열된 리소스의 이름을 저장합니다.
$ oc get clusterrolebindings,clusterroles -l "app=cert-manager-istio-csr,app.kubernetes.io/name=cert-manager-istio-csr"다음 명령을 실행하여 Istio-csr에 배포된 네임스페이스의 리소스를 나열하고 나중에 참조할 수 있도록 나열된 리소스의 이름을 저장합니다.
$ oc get certificate,deployments,services,serviceaccounts -l "app=cert-manager-istio-csr,app.kubernetes.io/name=cert-manager-istio-csr" -n <istio_csr_project_name>다음 명령을 실행하여 Red Hat OpenShift Service Mesh 또는 Istio가 배포한 네임스페이스의 리소스를 나열하고 나중에 참조할 수 있도록 나열된 리소스의 이름을 저장합니다.
$ oc get roles,rolebindings -l "app=cert-manager-istio-csr,app.kubernetes.io/name=cert-manager-istio-csr" -n <istio_csr_project_name>이전 단계에 나열된 각 리소스에 대해 다음 명령을 실행하여 리소스를 삭제합니다.
$ oc -n <istio_csr_project_name> delete <resource_type>/<resource_name>관련된 모든 리소스가 삭제될 때까지 이 과정을 반복합니다.