Pinniped용 TLS 인증서 구성 및 관리

이 항목에서는 Tanzu Kubernetes Grid Pinniped용 사용자 지정 TLS 인증서를 구성하는 방법을 설명합니다.

사용자 지정 TLS 인증서 구성

기본적으로 Tanzu Kubernetes Grid 자체 서명된 Issuer를 사용하여 Pinniped로의 HTTPS 트래픽을 보호하는 TLS 인증서를 생성합니다. 필요에 따라 관리 클러스터를 배포한 후 다음과 같이 기본 구성을 업데이트할 수 있습니다.

  1. 사용자 지정 ClusterIssuer 리소스 또는 고유한 TLS 암호를 설정합니다. 아래의 ClusterIssuer 리소스 또는 TLS 암호 설정을 참조하십시오.
  2. 관리 클러스터용 Pinniped 추가 기능 암호를 다시 배포하여 Pinniped 구성을 업데이트합니다. 아래의 Pinniped 구성 업데이트를 참조하십시오.

ClusterIssuer 리소스 또는 TLS 암호 설정

사용자 지정 ClusterIssuer 리소스를 사용하여 TLS 인증서를 생성하려는 경우:

  1. 관리 클러스터에서 cert-manager가 실행 중인지 확인합니다. 이 구성 요소는 기본적으로 모든 관리 클러스터에서 실행됩니다.
  2. 관리 클러스터에서 기존 ClusterIssuer 리소스의 이름을 가져옵니다. 자세한 내용은 cert-manager 설명서의 발급자 구성을 참조하십시오.
  3. 관리 클러스터용 Pinniped 추가 기능 암호의 values.yaml 섹션에 있는 custom_cluster_issuer 필드에 ClusterIssuer 이름을 지정한 다음 변경 내용을 적용합니다. 지침은 아래의 Pinniped 구성 업데이트를 참조하십시오. 이 섹션의 단계를 완료하면 Pinniped 인증서 체인이 ClusterIssuer에 의해 서명됩니다.

고유한 TLS 암호를 직접 지정하려면 다음을 수행합니다.

  1. Pinniped 서비스의 IP 주소 또는 DNS 호스트 이름인 pinniped-supervisor를 검색합니다.

    • 서비스 유형이 LoadBalancer(로드 밸런서가 있는 vSphere(예: AWS(Amazon Web Services) 또는 Azure))로 설정된 경우 다음을 실행하여 서비스의 외부 주소를 검색합니다.
    kubectl get service pinniped-supervisor -n pinniped-supervisor
    
    • 서비스 유형이 NodePort(로드 밸런서가 없는 vSphere)로 설정된 경우 서비스의 IP 주소는 vSphere 제어부 끝점과 동일합니다. IP 주소를 검색하려면 다음 명령을 실행할 수 있습니다.
    kubectl get configmap cluster-info -n kube-public -o yaml
    
  2. pinniped-supervisor 네임스페이스에 kubernetes.io/tls 암호를 생성합니다. TLS 암호를 생성하려면 다음을 실행합니다.

    kubectl create secret generic SECRET-NAME -n pinniped-supervisor --type kubernetes.io/tls --from-file tls.crt=FILENAME-1.crt --from-file tls.key=FILENAME-2.pem --from-file ca.crt=FILENAME-3.pem
    

    자리 표시자 텍스트를 다음과 같이 바꿉니다.

    • SECRET-NAME은 암호에 선택하는 이름입니다. 예: my-secret.
    • FILENAME-*tls.crt, tls.key 또는 ca.crt의 이름입니다. Pinniped용 TLS 암호에 지정하는 TLS 인증서에는 위의 단계에서 Pinniped 서비스의 IP 또는 DNS 호스트 이름이 포함되어야 합니다. ca.crt 필드는 필수이며, TLS 인증서를 확인하는 데 사용되는 CA 번들이 포함되어 있습니다.

    예를 들어 Pinniped용 최종 암호는 다음과 유사합니다.

    apiVersion: v1
    kind: Secret
    metadata:
     name: my-secret
     namespace: pinniped-supervisor
    type: kubernetes.io/tls
    data:
     tls.crt: |       MIIC2DCCAcCgAwIBAgIBATANBgkqh ...
     tls.key: |       MIIEpgIBAAKCAQEA7yn3bRHQ5FHMQ ...
     ca.crt:  |       MIIEpgIBAAKCAQEA7yn3bRHQ5FHMQ ...
    

    암호가 올바르게 생성된 경우 openssl x509 -in tls.crt -texttls.crt 를 디코딩하면 주체 대체 이름 필드에 IP 주소 또는 DNS 호스트 이름이 표시됩니다.

  3. 관리 클러스터용 Pinniped 추가 기능 암호의 values.yaml 섹션에 있는 custom_tls_secret 필드에 암호 이름을 지정한 다음 변경 내용을 적용합니다. 지침은 아래의 Pinniped 구성 업데이트를 참조하십시오.

  4. Pinniped 서비스의 DNS 호스트 이름을 구성하려면 관리 클러스터의 Pinniped 추가 기능 암호에 있는 values.yaml 섹션의 pinniped.supervisor_svc_external_dns 필드에 Pinniped Supervisor와 연결된 FQDN을 지정합니다. pinniped.supervisor_svc_external_dns 값은 https://로 시작해야 합니다. 자세한 내용은 자동 관리 패키지 values.yaml 설정을 참조하십시오. 그런 다음 변경 내용을 적용합니다. 지침은 아래의 Pinniped 구성 업데이트를 참조하십시오. 이 호스트 이름에 DNS를 별도로 구성해야 합니다(예: DNS 제공자에 A 레코드를 생성하여 Pinniped Supervisor 서비스의 IP 주소로 확인합니다. 이 호스트 이름은 Pinniped Supervisor에 구성하는 TLS 인증서에서 주체 대체 이름으로 표시되어야 합니다.

Pinniped 구성 업데이트

변경 내용을 적용하려면 아래 단계에 따라 Pinniped 구성을 업데이트합니다.

  1. 관리 클러스터의 Pinniped 추가 기능 암호를 파일에 저장하고 암호의 values.yaml 섹션에서 Base64로 인코딩된 문자열을 디코딩합니다.

    kubectl get secret CLUSTER-NAME-pinniped-package -n tkg-system -o jsonpath="{.data.values\.yaml}" | base64 -d > FILENAME.yaml
    

    자리 표시자 텍스트를 다음과 같이 바꿉니다.

    • CLUSTER-NAME은 관리 클러스터의 이름입니다.
    • FILENAME은 암호에 사용할 파일 이름입니다. 예: values.yaml.
  2. 디코딩된 텍스트에서 다음 중 하나를 수행합니다.

    • 위에서 ClusterIssuer 리소스를 준비한 경우 custom_cluster_issuer 필드에 리소스의 이름을 지정합니다. 예:

      ---
      infrastructure_provider: vsphere
      tkg_cluster_role: management
      custom_cluster_issuer: "my-cluster-issuer-name"
      pinniped:
       cert_duration: 2160h
       cert_renew_before: 360h
       supervisor_svc_endpoint: https://10.168.217.220:31234
       supervisor_ca_bundle_data: LS0tLS1CRUdJTiBDRVJUSUZJQ0F……
      ...
      
    • 위에서 고유한 TLS 암호를 준비한 경우 custom_tls_secret 필드에 암호의 이름을 지정합니다. 예:

      ---
      infrastructure_provider: vsphere
      tkg_cluster_role: management
      custom_tls_secret: "my-tls-secret-name"
      pinniped:
       cert_duration: 2160h
       cert_renew_before: 360h
       supervisor_svc_endpoint: https://10.168.217.220:31234
       supervisor_ca_bundle_data: LS0tLS1CRUdJTiBDRVJUSUZJQ0F……
      ...
      

      custom_tls_secret 필드를 구성하면 custom_cluster_issuer는 무시됩니다.

      Pinniped 서비스의 DNS 호스트 이름을 구성하려면 pinniped.supervisor_svc_external_dns 필드에서 Pinniped Supervisor에 사용할 FQDN을 지정합니다. 예를 들면 다음과 같습니다.

      ...
      pinniped:
      cert_duration: 2160h
      cert_renew_before: 360h
      supervisor_svc_endpoint: https://0.0.0.0:31234
      supervisor_ca_bundle_data: ca_bundle_data_of_supervisor_svc
      supervisor_svc_external_ip: 0.0.0.0
      supervisor_svc_external_dns: https://pinniped.example.com
      ...
      
  3. values.yaml 섹션을 다시 인코딩하고 Pinniped 추가 기능 암호를 업데이트합니다. 이 명령은 환경 OS에 따라 다릅니다. 예:

    Linux:

    kubectl patch secret CLUSTER-NAME-pinniped-package -n tkg-system -p "{\"data\":{\"values.yaml\":\"$(base64 -w 0 < values.yaml)\"}}" --type=merge
    

    macOS:

    kubectl patch secret CLUSTER-NAME-pinniped-package -n tkg-system -p "{\"data\":{\"values.yaml\":\"$(base64 < values.yaml)\"}}" --type=merge
    
  4. 변경 내용이 성공적으로 적용되었는지 확인합니다.

    1. pinniped 애플리케이션의 상태를 가져옵니다.

      kubectl get app CLUSTER-NAME-pinniped -n tkg-system
      

      반환된 상태가 조정 실패인 경우 다음 명령을 실행하여 실패 세부 정보를 가져옵니다.

      kubectl get app CLUSTER-NAME-pinniped -n tkg-system -o yaml
      
    2. tanzu mc kubeconfig get --export-file ./KUBECONFIG-MC-CLUSTER-NAME 명령을 실행하여 관리 클러스터용 kubeconfig 파일을 생성합니다. 그런 다음 kubeconfig를 사용하여 kubectl get pods --kubeconfig ./KUBECONFIG-MC-CLUSTER-NAME과 같은 명령을 실행합니다. 또한 관리 클러스터가 워크로드 클러스터를 관리하는 경우 tanzu cluster kubeconfig get <WORKLOAD-CLUSTER-NAME> --export-file ./KUBECONFIG-WORKLOAD-CLUSTER-NAME을 실행한 다음, 기존 클러스터 각각에 대해 kubectl get pods --kubeconfig ./KUBECONFIG-WORKLOAD-CLUSTER-NAME를 실행합니다.

check-circle-line exclamation-circle-line close-line
Scroll to top icon