4.2. cert-manager 설치
istio-csr
를 배포한 다음 istio-csr
에이전트를 사용하여 워크로드 및 컨트롤 플레인 인증서 서명 요청을 처리하는 Istio
리소스를 생성하여 cert-manager를 OpenShift Service Mesh와 통합할 수 있습니다. 이 예제에서는 자체 서명된 발급
자를 생성하지만 대신 다른 발급
자를 사용할 수 있습니다.
Istio
리소스를 설치하기 전에 cert-manager를 설치해야 합니다.
프로세스
다음 명령을 실행하여
istio-system
네임스페이스를 생성합니다.$ oc create namespace istio-system
YAML 파일에
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-23-0}"
참고버전 이름은 <
istio-name>-v<major_version>-<minor_version>-<patch_version
> 형식을 사용합니다. 예:default-v1-23-0
.
추가 리소스
다음 단계
4.2.3. Istio 리소스 설치
위치 또는 개정 기반 업데이트 전략에 대한 절차에 따라 istio-csr
를 설치한 후 Istio
리소스를 설치할 수 있습니다.
Istio의 빌드된 CA 서버를 비활성화하고 istiod에 istio-csr
CA 서버를 사용하도록 지시해야 합니다. istio-csr
CA 서버는 istiod 및 사용자 워크로드 모두에 대한 인증서를 발행합니다.
프로세스
다음 예에 표시된 대로
Istio
오브젝트를 생성합니다.istio.yaml
오브젝트의 예apiVersion: sailoperator.io/v1alpha1 kind: Istio metadata: name: default spec: version: v1.23.0 namespace: istio-system values: global: caAddress: cert-manager-istio-csr.cert-manager.svc:443 pilot: env: ENABLE_CA_SERVER: "false" volumeMounts: - mountPath: /tmp/var/run/secrets/istiod/tls name: istio-csr-dns-cert readOnly: true
참고버전 기반 업데이트 전략을 사용하여 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 istiorevisions
다음 명령을 실행하여 활성 버전의 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/istio/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