4.2. cert-manager 설치
istio-csr 를 배포한 다음 istio-csr 에이전트를 사용하여 워크로드 및 컨트롤 플레인 인증서 서명 요청을 처리하는 Istio 리소스를 생성하여 cert-manager를 OpenShift Service Mesh와 통합할 수 있습니다. 이 예제에서는 자체 서명된 발급 자를 생성하지만 대신 다른 발급 자를 사용할 수 있습니다.
Istio 리소스를 설치하기 전에 cert-manager를 설치해야 합니다.
절차
다음 명령을 실행하여
istio-system네임스페이스를 생성합니다.oc create namespace istio-system
$ oc create namespace istio-systemCopy to Clipboard Copied! Toggle word wrap Toggle overflow YAML 파일에
Issuer오브젝트를 생성하여 루트 발행자를 생성합니다.다음 예와 유사한
Issuer오브젝트를 생성합니다.issuer.yaml파일 예Copy to Clipboard Copied! Toggle word wrap Toggle overflow 다음 명령을 실행하여 오브젝트를 생성합니다.
oc apply -f issuer.yaml
$ oc apply -f issuer.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 다음 명령을 실행하여
istio-ca인증서에 "Ready" 상태 조건이 포함될 때까지 기다립니다.oc wait --for=condition=Ready certificates/istio-ca -n istio-system
$ oc wait --for=condition=Ready certificates/istio-ca -n istio-systemCopy to Clipboard Copied! Toggle word wrap Toggle overflow
istio-csr에서 사용할 수 있도록
istio-ca인증서를cert-manager네임스페이스에 복사합니다.다음 명령을 실행하여 로컬 파일에 보안을 복사합니다.
oc get -n istio-system secret istio-ca -o jsonpath='{.data.tls\.crt}' | base64 -d > ca.pem$ oc get -n istio-system secret istio-ca -o jsonpath='{.data.tls\.crt}' | base64 -d > ca.pemCopy to Clipboard Copied! Toggle word wrap Toggle overflow 다음 명령을 실행하여
cert-manager네임스페이스의 로컬 인증서 파일에서 보안을 생성합니다.oc create secret generic -n cert-manager istio-root-ca --from-file=ca.pem=ca.pem
$ oc create secret generic -n cert-manager istio-root-ca --from-file=ca.pem=ca.pemCopy to Clipboard Copied! Toggle word wrap Toggle overflow
다음 단계
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
$ helm repo add jetstack https://charts.jetstack.io --force-updateCopy to Clipboard Copied! Toggle word wrap Toggle overflow 다음 명령을 실행하여
istio-csr차트를 설치합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow
다음 단계
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
$ helm repo add jetstack https://charts.jetstack.io --force-updateCopy to Clipboard Copied! Toggle word wrap Toggle overflow 다음 명령을 실행하여 버전 이름으로
istio-csr차트를 설치합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow 참고버전 이름은 <
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오브젝트의 예Copy to Clipboard Copied! Toggle word wrap Toggle overflow 참고버전 기반 업데이트 전략을 사용하여 CSR 에이전트를 설치한 경우
Istio오브젝트 YAML에 다음을 추가해야 합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow 다음 명령을 실행하여
Istio리소스를 생성합니다.oc apply -f istio.yaml
$ oc apply -f istio.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 다음 명령을 실행하여
Istio오브젝트가 준비될 때까지 기다립니다.oc wait --for=condition=Ready istios/default -n istio-system
$ oc wait --for=condition=Ready istios/default -n istio-systemCopy to Clipboard Copied! Toggle word wrap Toggle overflow
4.2.4. cert-manager 설치 확인 링크 복사링크가 클립보드에 복사되었습니다!
샘플 httpbin 서비스와 절전 애플리케이션을 사용하여 워크로드 간 통신을 확인할 수 있습니다. 프록시의 워크로드 인증서를 확인하여 cert-manager 툴이 올바르게 설치되었는지 확인할 수도 있습니다.
절차
다음 명령을 실행하여
샘플네임스페이스를 생성합니다.oc new-project sample
$ oc new-project sampleCopy to Clipboard Copied! Toggle word wrap Toggle overflow 다음 명령을 실행하여 활성 Istio 버전을 찾습니다.
oc get istios default -o jsonpath='{.status.activeRevisionName}'$ oc get istios default -o jsonpath='{.status.activeRevisionName}'Copy to Clipboard Copied! Toggle word wrap Toggle overflow 다음 명령을 실행하여 활성 버전의 injection 레이블을
샘플네임스페이스에 추가합니다.oc label namespace sample istio.io/rev=<your-active-revision-name> --overwrite=true
$ oc label namespace sample istio.io/rev=<your-active-revision-name> --overwrite=trueCopy to Clipboard Copied! Toggle word wrap Toggle overflow 다음 명령을 실행하여 샘플
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/httpbin/httpbin.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 다음 명령을 실행하여 샘플
절전애플리케이션을 배포합니다.oc apply -n sample -f https://raw.githubusercontent.com/openshift-service-mesh/istio/refs/heads/master/samples/sleep/sleep.yaml
$ oc apply -n sample -f https://raw.githubusercontent.com/openshift-service-mesh/istio/refs/heads/master/samples/sleep/sleep.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 다음 명령을 실행하여 두 애플리케이션 모두 준비될 때까지 기다립니다.
oc rollout status -n sample deployment httpbin sleep
$ oc rollout status -n sample deployment httpbin sleepCopy to Clipboard Copied! Toggle word wrap Toggle overflow 다음 명령을 실행하여
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"$ 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"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 성공적인 출력 예
200
200Copy to Clipboard Copied! Toggle word wrap Toggle overflow 다음 명령을 실행하여
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$ 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 -nooutCopy to Clipboard Copied! Toggle word wrap Toggle overflow 출력 예
... Issuer: O = cert-manager + O = cluster.local, CN = istio-ca ... X509v3 Subject Alternative Name: URI:spiffe://cluster.local/ns/sample/sa/httpbin
... Issuer: O = cert-manager + O = cluster.local, CN = istio-ca ... X509v3 Subject Alternative Name: URI:spiffe://cluster.local/ns/sample/sa/httpbinCopy to Clipboard Copied! Toggle word wrap Toggle overflow