이 항목에서는 Tanzu Kubernetes Grid Pinniped용 사용자 지정 TLS 인증서를 구성하는 방법을 설명합니다.
기본적으로 Tanzu Kubernetes Grid 자체 서명된 Issuer
를 사용하여 Pinniped로의 HTTPS 트래픽을 보호하는 TLS 인증서를 생성합니다. 필요에 따라 관리 클러스터를 배포한 후 다음과 같이 기본 구성을 업데이트할 수 있습니다.
ClusterIssuer
리소스 또는 고유한 TLS 암호를 설정합니다. 아래의 ClusterIssuer
리소스 또는 TLS 암호 설정을 참조하십시오.ClusterIssuer
리소스 또는 TLS 암호 설정사용자 지정 ClusterIssuer
리소스를 사용하여 TLS 인증서를 생성하려는 경우:
cert-manager
가 실행 중인지 확인합니다. 이 구성 요소는 기본적으로 모든 관리 클러스터에서 실행됩니다.ClusterIssuer
리소스의 이름을 가져옵니다. 자세한 내용은 cert-manager 설명서의 발급자 구성을 참조하십시오.values.yaml
섹션에 있는 custom_cluster_issuer
필드에 ClusterIssuer
이름을 지정한 다음 변경 내용을 적용합니다. 지침은 아래의 Pinniped 구성 업데이트를 참조하십시오. 이 섹션의 단계를 완료하면 Pinniped 인증서 체인이 ClusterIssuer
에 의해 서명됩니다.고유한 TLS 암호를 직접 지정하려면 다음을 수행합니다.
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
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 -text
로 tls.crt
를 디코딩하면 주체 대체 이름 필드에 IP 주소 또는 DNS 호스트 이름이 표시됩니다.
관리 클러스터용 Pinniped 추가 기능 암호의 values.yaml
섹션에 있는 custom_tls_secret
필드에 암호 이름을 지정한 다음 변경 내용을 적용합니다. 지침은 아래의 Pinniped 구성 업데이트를 참조하십시오.
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 추가 기능 암호를 파일에 저장하고 암호의 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
.디코딩된 텍스트에서 다음 중 하나를 수행합니다.
위에서 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
...
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
변경 내용이 성공적으로 적용되었는지 확인합니다.
pinniped
애플리케이션의 상태를 가져옵니다.
kubectl get app CLUSTER-NAME-pinniped -n tkg-system
반환된 상태가 조정 실패인 경우 다음 명령을 실행하여 실패 세부 정보를 가져옵니다.
kubectl get app CLUSTER-NAME-pinniped -n tkg-system -o yaml
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
를 실행합니다.