4.2. cert-manager 설치
istio-csr 를 배포한 다음 istio-csr 에이전트를 사용하여 워크로드 및 컨트롤 플레인 인증서 서명 요청을 처리하는 Istio 리소스를 생성하여 cert-manager를 OpenShift Service Mesh와 통합할 수 있습니다. 이 예제에서는 자체 서명된 발급 자를 생성하지만 대신 다른 발급 자를 사용할 수 있습니다.
Istio 리소스를 설치하기 전에 cert-manager를 설치해야 합니다.
절차
다음 명령을 실행하여
istio-system네임스페이스를 생성합니다.$ oc create namespace istio-systemYAML 파일에
Issuer오브젝트를 생성하여 루트 발행자를 생성합니다.다음 예와 유사한
Issuer오브젝트를 생성합니다.issuer.yaml파일 예apiVersion: cert-manager.io/v1 kind: Issuer metadata: name: selfsigned namespace: istio-system spec: selfSigned: {} --- apiVersion: cert-manager.io/v1 kind: Certificate metadata: name: istio-ca namespace: istio-system 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: Issuer group: cert-manager.io --- apiVersion: cert-manager.io/v1 kind: Issuer metadata: name: istio-ca namespace: istio-system spec: ca: secretName: istio-ca ---다음 명령을 실행하여 오브젝트를 생성합니다.
$ oc apply -f issuer.yaml다음 명령을 실행하여
istio-ca인증서에 "Ready" 상태 조건이 포함될 때까지 기다립니다.$ oc wait --for=condition=Ready certificates/istio-ca -n istio-system
istio-csr에서 사용할 수 있도록
istio-ca인증서를cert-manager네임스페이스에 복사합니다.다음 명령을 실행하여 로컬 파일에 보안을 복사합니다.
$ oc get -n istio-system secret istio-ca -o jsonpath='{.data.tls\.crt}' | base64 -d > ca.pem다음 명령을 실행하여
cert-manager네임스페이스의 로컬 인증서 파일에서 보안을 생성합니다.$ oc create secret generic -n cert-manager istio-root-ca --from-file=ca.pem=ca.pem
다음 단계
istio-csr 를 설치하려면 원하는 업데이트 전략 유형에 대한 istio-csr 설치 지침을 따라야 합니다. Istio 리소스를 생성하고 설치할 때 기본적으로 spec.updateStrategy 는 InPlace 로 설정됩니다. istio-csr 를 설치한 후 Istio 리소스를 생성하고 설치합니다.
4.2.1. 위치 업데이트 전략을 사용하여 istio-csr 에이전트 설치 링크 복사링크가 클립보드에 복사되었습니다!
Istio 리소스는 기본적으로 위치 업데이트 전략을 사용합니다. Istio 리소스를 생성하고 설치할 때 spec.updateStrategy 를 InPlace 로 종료하려는 경우 다음 절차를 따르십시오.
절차
다음 명령을 실행하여 로컬 Helm 리포지토리에 Cryostat 스택 차트 리포지터리를 추가합니다.
$ helm repo add jetstack https://charts.jetstack.io --force-update다음 명령을 실행하여
istio-csr차트를 설치합니다.$ helm upgrade cert-manager-istio-csr jetstack/cert-manager-istio-csr \ --install \ --namespace cert-manager \ --wait \ --set "app.tls.rootCAFile=/var/run/secrets/istio-csr/ca.pem" \ --set "volumeMounts[0].name=root-ca" \ --set "volumeMounts[0].mountPath=/var/run/secrets/istio-csr" \ --set "volumes[0].name=root-ca" \ --set "volumes[0].secret.secretName=istio-root-ca" \ --set "app.istio.namespace=istio-system"
다음 단계
4.2.2. 버전 기반 업데이트 전략을 사용하여 istio-csr 에이전트 설치 링크 복사링크가 클립보드에 복사되었습니다!
Istio 리소스는 기본적으로 위치 업데이트 전략을 사용합니다. Istio 리소스를 생성하고 설치할 때 spec.updateStrategy 를 RevisionBased 로 변경하려면 다음 절차를 따르십시오.
절차
-
istio-csr배포에 대한 모든 Istio 버전을 지정합니다. "istio-csr deployment"를 참조하십시오. 다음 명령을 실행하여 로컬 Helm 리포지토리에 Cryostat 스택 차트를 추가합니다.
$ helm repo add jetstack https://charts.jetstack.io --force-update다음 명령을 실행하여 버전 이름으로
istio-csr차트를 설치합니다.$ helm upgrade cert-manager-istio-csr jetstack/cert-manager-istio-csr \ --install \ --namespace cert-manager \ --wait \ --set "app.tls.rootCAFile=/var/run/secrets/istio-csr/ca.pem" \ --set "volumeMounts[0].name=root-ca" \ --set "volumeMounts[0].mountPath=/var/run/secrets/istio-csr" \ --set "volumes[0].name=root-ca" \ --set "volumes[0].secret.secretName=istio-root-ca" \ --set "app.istio.namespace=istio-system" \ --set "app.istio.revisions={default-v1-24-3}"참고버전 이름은 <
istio-name>-v<major_version>-<minor_version>-<patch_version> 형식을 사용합니다. 예:default-v1-24-3.
추가 리소스
다음 단계
4.2.3. Istio 리소스 설치 링크 복사링크가 클립보드에 복사되었습니다!
위치 또는 개정 기반 업데이트 전략에 대한 절차에 따라 istio-csr 를 설치한 후 Istio 리소스를 설치할 수 있습니다.
Istio의 빌드된 CA 서버를 비활성화하고 istiod에 istio-csr CA 서버를 사용하도록 지시해야 합니다. istio-csr CA 서버는 istiod 및 사용자 워크로드 모두에 대한 인증서를 발행합니다.
절차
다음 예에 표시된 대로
Istio오브젝트를 생성합니다.istio.yaml오브젝트의 예apiVersion: sailoperator.io/v1 kind: Istio metadata: name: default spec: version: v1.24.3 namespace: istio-system values: global: caAddress: cert-manager-istio-csr.cert-manager.svc:443 pilot: env: ENABLE_CA_SERVER: "false"참고버전 기반 업데이트 전략을 사용하여 CSR 에이전트를 설치한 경우
Istio오브젝트 YAML에 다음을 추가해야 합니다.kind: Istio metadata: name: default spec: updateStrategy: type: RevisionBased다음 명령을 실행하여
Istio리소스를 생성합니다.$ oc apply -f istio.yaml다음 명령을 실행하여
Istio오브젝트가 준비될 때까지 기다립니다.$ oc wait --for=condition=Ready istios/default -n istio-system
4.2.4. cert-manager 설치 확인 링크 복사링크가 클립보드에 복사되었습니다!
샘플 httpbin 서비스와 절전 애플리케이션을 사용하여 워크로드 간 통신을 확인할 수 있습니다. 프록시의 워크로드 인증서를 확인하여 cert-manager 툴이 올바르게 설치되었는지 확인할 수도 있습니다.
절차
다음 명령을 실행하여
샘플네임스페이스를 생성합니다.$ oc new-project sample다음 명령을 실행하여 활성 Istio 버전을 찾습니다.
$ oc get istios default -o jsonpath='{.status.activeRevisionName}'다음 명령을 실행하여 활성 버전의 injection 레이블을
샘플네임스페이스에 추가합니다.$ oc label namespace sample istio.io/rev=<your-active-revision-name> --overwrite=true다음 명령을 실행하여 샘플
httpbin서비스를 배포합니다.$ oc apply -n sample -f https://raw.githubusercontent.com/openshift-service-mesh/istio/refs/heads/master/samples/httpbin/httpbin.yaml다음 명령을 실행하여 샘플
절전애플리케이션을 배포합니다.$ oc apply -n sample -f https://raw.githubusercontent.com/openshift-service-mesh/istio/refs/heads/master/samples/sleep/sleep.yaml다음 명령을 실행하여 두 애플리케이션 모두 준비될 때까지 기다립니다.
$ oc rollout status -n sample deployment httpbin sleep다음 명령을 실행하여
sleep애플리케이션이httpbin서비스에 액세스할 수 있는지 확인합니다.$ oc exec "$(oc get pod -l app=sleep -n sample \ -o jsonpath={.items..metadata.name})" -c sleep -n sample -- \ curl http://httpbin.sample:8000/ip -s -o /dev/null \ -w "%{http_code}\n"성공적인 출력 예
200다음 명령을 실행하여
httpbin서비스의 워크로드 인증서를 출력하고 출력을 확인합니다.$ istioctl proxy-config secret -n sample $(oc get pods -n sample -o jsonpath='{.items..metadata.name}' --selector app=httpbin) -o json | jq -r '.dynamicActiveSecrets[0].secret.tlsCertificate.certificateChain.inlineBytes' | base64 --decode | openssl x509 -text -noout출력 예
... Issuer: O = cert-manager + O = cluster.local, CN = istio-ca ... X509v3 Subject Alternative Name: URI:spiffe://cluster.local/ns/sample/sa/httpbin