En este tema se explica cómo configurar certificados TLS personalizados para Pinniped en Tanzu Kubernetes Grid.
De forma predeterminada, Tanzu Kubernetes Grid utiliza un Issuer
autofirmado para generar los certificados TLS que protegen el tráfico HTTPS a Pinniped. Opcionalmente, puede actualizar la configuración predeterminada después de implementar el clúster de administración de la siguiente manera:
ClusterIssuer
personalizado o su propio secreto TLS. Consulte Establecer un recurso ClusterIssuer
o un secreto TLS a continuación.ClusterIssuer
o un secreto TLSSi desea utilizar un recurso ClusterIssuer
para generar los certificados TLS:
cert-manager
se esté ejecutando en el clúster de administración. Este componente se ejecuta de forma predeterminada en todos los clústeres de administración.ClusterIssuer
existente en el clúster de administración. Para obtener más información, consulte Configuración del emisor en la documentación de cert-manager.ClusterIssuer
en el campo custom_cluster_issuer
de la sección values.yaml
del secreto del complemento Pinniped para el clúster de administración y, a continuación, aplique los cambios. Para obtener instrucciones, consulte Actualizar la configuración de Pinniped a continuación. Después de completar los pasos de esta sección, la cadena de certificados de Pinniped será firmada por su ClusterIssuer
.Si desea especificar su propio secreto TLS directamente:
Recupere la dirección IP o el nombre de host de DNS del servicio Pinniped, pinniped-supervisor
:
LoadBalancer
(vSphere con un equilibrador de carga, por ejemplo, NSX Advanced Load Balancer, Amazon Web Services [AWS] o Azure), recupere la dirección externa del servicio ejecutando:kubectl get service pinniped-supervisor -n pinniped-supervisor
NodePort
(vSphere sin un equilibrador de carga), la dirección IP del servicio es la misma que el endpoint del plano de control de vSphere. Para recuperar la dirección IP, puede ejecutar el siguiente comando:kubectl get configmap cluster-info -n kube-public -o yaml
Cree un secreto de kubernetes.io/tls
en el espacio de nombres pinniped-supervisor
. Para crear un secreto TLS, ejecute:
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
Reemplace el texto de marcador de posición de la siguiente manera:
SECRET-NAME
es el nombre que eligió para el secreto. Por ejemplo, my-secret
.FILENAME-*
es el nombre de sus tls.crt
, tls.key
o ca.crt
. El certificado TLS que especifique en el secreto de TLS para Pinniped debe incluir la IP o el nombre de host DNS del servicio Pinniped del paso anterior. El campo ca.crt
es obligatorio y contiene el paquete de CA que se utiliza para comprobar el certificado TLS.Por ejemplo, el secreto resultante para Pinniped tiene un aspecto similar al siguiente:
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 ...
Si el secreto se generó correctamente, la descodificación tls.crt
con openssl x509 -in tls.crt -text
muestra la dirección IP o el nombre de host de DNS en el campo Nombre alternativo del sujeto.
Especifique el nombre del secreto en el campo custom_tls_secret
de la sección values.yaml
del secreto de complemento Pinniped para el clúster de administración y, a continuación, aplique los cambios. Para obtener instrucciones, consulte Actualizar la configuración de Pinniped a continuación.
Si desea configurar un nombre de host de DNS para el servicio Pinniped, especifique el FQDN asociado con un supervisor Pinniped en el campo pinniped.supervisor_svc_external_dns
de la sección values.yaml
del secreto del complemento Pinniped del clúster de administración. Tenga en cuenta que el valor de pinniped.supervisor_svc_external_dns
debe comenzar con https://
. Consulte la configuración de values.yaml del paquete administrado automáticamente en detalle. A continuación, aplique los cambios. Para obtener instrucciones, consulte Actualizar la configuración de Pinniped a continuación. Tenga en cuenta que debe configurar el DNS por separado para este nombre de host; por ejemplo, debe crear un registro A
en el proveedor de DNS para resolver la dirección IP del servicio de supervisor Pinniped. Este nombre de host debe aparecer como nombre alternativo del asunto en el certificado TLS que configure para el supervisor Pinniped.
Para aplicar los cambios, actualice la configuración de Pinniped siguiendo los pasos que se indican a continuación:
Guarde el secreto del complemento Pinniped para el clúster de administración en un archivo y descodifique la cadena con codificación Base64 en la sección values.yaml
del secreto.
kubectl get secret CLUSTER-NAME-pinniped-package -n tkg-system -o jsonpath="{.data.values\.yaml}" | base64 -d > FILENAME.yaml
Reemplace el texto de marcador de posición de la siguiente manera:
CLUSTER-NAME
es el nombre de su clúster de administración.FILENAME
es el nombre de archivo que desea utilizar para el secreto. Por ejemplo, values.yaml
.En el texto decodificado, realice una de las siguientes acciones:
Si preparó un recurso ClusterIssuer
anterior, especifique el nombre del recurso en el campo custom_cluster_issuer
. Por ejemplo:
---
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……
...
Si preparó su propio secreto TLS anteriormente, especifique el nombre del secreto en el campo custom_tls_secret
. Por ejemplo:
---
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……
...
Si configura el campo custom_tls_secret
, se ignorará el custom_cluster_issuer
.
Si desea configurar un nombre de host de DNS para el servicio Pinniped, especifique el FQDN que se debe utilizar para el supervisor Pinniped en el campo pinniped.supervisor_svc_external_dns
. Por ejemplo:
...
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
...
Vuelva a codificar la sección values.yaml
y actualice el secreto del complemento Pinniped. Este comando varía según el sistema operativo del entorno. Por ejemplo:
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
Confirme que los cambios se han aplicado correctamente:
Obtenga el estado de la aplicación pinniped
:
kubectl get app CLUSTER-NAME-pinniped -n tkg-system
Si el estado devuelto es Reconciliación fallida, ejecute el siguiente comando para obtener detalles sobre el fallo:
kubectl get app CLUSTER-NAME-pinniped -n tkg-system -o yaml
Para generar un archivo kubeconfig para el clúster de administración, ejecute el comando tanzu mc kubeconfig get --export-file ./KUBECONFIG-MC-CLUSTER-NAME
. A continuación, ejecute un comando como kubectl get pods --kubeconfig ./KUBECONFIG-MC-CLUSTER-NAME
mediante kubeconfig. Además, si el clúster de administración administra algún clúster de carga de trabajo, ejecute tanzu cluster kubeconfig get <WORKLOAD-CLUSTER-NAME> --export-file ./KUBECONFIG-WORKLOAD-CLUSTER-NAME
y, a continuación, kubectl get pods --kubeconfig ./KUBECONFIG-WORKLOAD-CLUSTER-NAME
en cada uno de los clústeres existentes.