4.2. cert-manager 설치


istio-csr 를 배포한 다음 istio-csr 에이전트를 사용하여 워크로드 및 컨트롤 플레인 인증서 서명 요청을 처리하는 Istio 리소스를 생성하여 cert-manager를 OpenShift Service Mesh와 통합할 수 있습니다. 이 예제에서는 자체 서명된 발급 자를 생성하지만 대신 다른 발급 자를 사용할 수 있습니다.

중요

Istio 리소스를 설치하기 전에 cert-manager를 설치해야 합니다.

프로세스

  1. 다음 명령을 실행하여 istio-system 네임스페이스를 생성합니다.

    $ oc create namespace istio-system
  2. YAML 파일에 Issuer 오브젝트를 생성하여 루트 발행자를 생성합니다.

    1. 다음 예와 유사한 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
      ---

    2. 다음 명령을 실행하여 오브젝트를 생성합니다.

      $ oc apply -f issuer.yaml
    3. 다음 명령을 실행하여 istio-ca 인증서에 "Ready" 상태 조건이 포함될 때까지 기다립니다.

      $ oc wait --for=condition=Ready certificates/istio-ca -n istio-system
  3. istio-csr에서 사용할 수 있도록 istio-ca 인증서를 cert-manager 네임스페이스에 복사합니다.

    1. 다음 명령을 실행하여 로컬 파일에 보안을 복사합니다.

      $ oc get -n istio-system secret istio-ca -o jsonpath='{.data.tls\.crt}' | base64 -d > ca.pem
    2. 다음 명령을 실행하여 cert-manager 네임스페이스의 로컬 인증서 파일에서 보안을 생성합니다.

      $ oc create secret generic -n cert-manager istio-root-ca --from-file=ca.pem=ca.pem

다음 단계

istio-csr 를 설치하려면 원하는 업데이트 전략 유형에 대한 istio-csr 설치 지침을 따라야 합니다. Istio 리소스를 생성하고 설치할 때 기본적으로 spec.updateStrategyInPlace 로 설정됩니다. istio-csr 를 설치한 후 Istio 리소스를 생성하고 설치합니다.

4.2.1. 위치 업데이트 전략을 사용하여 istio-csr 에이전트 설치

Istio 리소스는 기본적으로 위치 업데이트 전략을 사용합니다. Istio 리소스를 생성하고 설치할 때 spec.updateStrategyInPlace 로 종료하려는 경우 다음 절차를 따르십시오.

프로세스

  1. 다음 명령을 실행하여 로컬 Helm 리포지토리에 Cryostat 스택 차트 리포지터리를 추가합니다.

    $ helm repo add jetstack https://charts.jetstack.io --force-update
  2. 다음 명령을 실행하여 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.updateStrategyRevisionBased 로 변경하려면 다음 절차를 따르십시오.

프로세스

  1. istio-csr 배포에 대한 모든 Istio 버전을 지정합니다. "istio-csr deployment"를 참조하십시오.
  2. 다음 명령을 실행하여 로컬 Helm 리포지토리에 Cryostat 스택 차트를 추가합니다.

    $ helm repo add jetstack https://charts.jetstack.io --force-update
  3. 다음 명령을 실행하여 버전 이름으로 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 및 사용자 워크로드 모두에 대한 인증서를 발행합니다.

프로세스

  1. 다음 예에 표시된 대로 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
  2. 다음 명령을 실행하여 Istio 리소스를 생성합니다.

    $ oc apply -f istio.yaml
  3. 다음 명령을 실행하여 Istio 오브젝트가 준비될 때까지 기다립니다.

    $ oc wait --for=condition=Ready istios/default -n istio-system

4.2.4. cert-manager 설치 확인

샘플 httpbin 서비스와 절전 애플리케이션을 사용하여 워크로드 간 통신을 확인할 수 있습니다. 프록시의 워크로드 인증서를 확인하여 cert-manager 툴이 올바르게 설치되었는지 확인할 수도 있습니다.

프로세스

  1. 다음 명령을 실행하여 샘플 네임스페이스를 생성합니다.

    $ oc new-project sample
  2. 다음 명령을 실행하여 활성 Istio 버전을 찾습니다.

    $ oc get istiorevisions
  3. 다음 명령을 실행하여 활성 버전의 injection 레이블을 샘플 네임스페이스에 추가합니다.

    $ oc label namespace sample istio.io/rev=<your-active-revision-name> --overwrite=true
  4. 다음 명령을 실행하여 샘플 httpbin 서비스를 배포합니다.

    $ oc apply -n sample -f https://raw.githubusercontent.com/openshift-service-mesh/istio/refs/heads/master/samples/httpbin/httpbin.yaml
  5. 다음 명령을 실행하여 샘플 절전 애플리케이션을 배포합니다.

    $ oc apply -n sample -f https://raw.githubusercontent.com/istio/istio/refs/heads/master/samples/sleep/sleep.yaml
  6. 다음 명령을 실행하여 두 애플리케이션 모두 준비될 때까지 기다립니다.

    $ oc rollout status -n sample deployment httpbin sleep
  7. 다음 명령을 실행하여 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

  8. 다음 명령을 실행하여 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

Red Hat logoGithubRedditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

Red Hat을 사용하는 고객은 신뢰할 수 있는 콘텐츠가 포함된 제품과 서비스를 통해 혁신하고 목표를 달성할 수 있습니다.

보다 포괄적 수용을 위한 오픈 소스 용어 교체

Red Hat은 코드, 문서, 웹 속성에서 문제가 있는 언어를 교체하기 위해 최선을 다하고 있습니다. 자세한 내용은 다음을 참조하세요.Red Hat 블로그.

Red Hat 소개

Red Hat은 기업이 핵심 데이터 센터에서 네트워크 에지에 이르기까지 플랫폼과 환경 전반에서 더 쉽게 작업할 수 있도록 강화된 솔루션을 제공합니다.

© 2024 Red Hat, Inc.