En esta página, se muestra cómo puedes usar objetos Ingress para crear balanceadores de cargas externos con certificados SSL administrados por Google. Estos certificados son certificados de Validación de dominio (DV) que Google aprovisiona, renueva y administra para tus nombres de dominio. Estos certificados no demuestran tu identidad ni la de tu organización.
Si deseas obtener información para crear certificados administrados por Google con Google Cloud, consulta Certificados administrados por Google.
Los certificados SSL administrados por Google de GKE admiten clústeres públicos y privados.
Versiones de API
Configura los certificados SSL administrados por Google mediante un recurso personalizado ManagedCertificate
, que está disponible en diferentes versiones de API, según la versión del clúster de Google Kubernetes Engine (GKE):
- La API de
v1beta2
ManagedCertificate
está disponible en GKE versión 1.15 y versiones posteriores. - La API
ManagedCertificate
dev1
está disponible en las versiones 1.17.9-gke.6300 y posteriores de GKE.
Aunque los clústeres de GKE actualmente admiten la API de ManagedCertificate v1beta1
, esta versión de la API está obsoleta y se quitará en las próximas versiones de GKE. Se recomienda que uses una versión más nueva de la API.
Migra entre versiones de la API
Los objetos ManagedCertificate
se promueven de forma automática a una versión más reciente de la API cuando se actualizan en un clúster que admite la versión más reciente de la API. Los recursos se actualizan de manera periódica, por lo que no necesitas realizar ninguna acción para migrar los recursos.
Crea un Ingress con un certificado administrado por Google
Para configurar un certificado SSL administrado por Google y asociarlo con un Ingress, debes seguir estos pasos:
- Crea un objeto
ManagedCertificate
en el mismo espacio de nombres que el Ingress. - Agrega la anotación
networking.gke.io/managed-certificates
al Ingress para asociar el objetoManagedCertificate
a un Ingress. Esta anotación es una lista separada por comas de objetosManagedCertificate
.
Limitaciones
Los certificados administrados por Google son menos flexibles que los certificados que tú obtienes y administras. Los certificados administrados por Google admiten hasta 100 dominios sin comodines. A diferencia de los certificados autoadministrados, los certificados administrados por Google no admiten dominios comodines.
Si necesitas certificados autoadministrados o si ya posees certificados SSL que deseas configurar en el Ingress, consulta la sección sobre cómo configurar HTTPS (TLS) entre el cliente y el balanceador de cargas.
La cantidad y el tipo de certificados admitidos por un Ingress están definidos por los límites de los certificados SSL administrados por Google.
No se admiten las actualizaciones en los certificados administrados por Google. Para obtener más información, consulta Actualiza un certificado administrado por Google de forma manual.
Requisitos previos
- Debes ser dueño del nombre de dominio. El nombre de dominio no debe tener más de 63 caracteres. Puedes usar Google Domains o algún otro registrador.
- El clúster debe tener el complemento
HttpLoadBalancing
habilitado. - El
"kubernetes.io/ingress.class"
debe ser"gce"
. - Debes aplicar los recursos
Ingress
yManagedCertificate
en el mismo proyecto y el mismo espacio de nombres. Crea una dirección IP externa (estática) reservada. Reservar una dirección IP estática garantiza que te pertenece, incluso si borras el Ingress. Si no reservas una dirección IP, es posible que esta cambie y requiera que vuelvas a configurar los registros DNS de tu dominio. Usa Google Cloud CLI o Cloud Console para crear una dirección IP reservada.
gcloud
Para crear una dirección IP reservada, ejecuta el siguiente comando:
gcloud compute addresses create ADDRESS_NAME --global
Reemplaza
ADDRESS_NAME
por el nombre de la dirección IP reservada que creas.Para encontrar la dirección IP estática que creaste, ejecuta el siguiente comando:
gcloud compute addresses describe ADDRESS_NAME --global
El resultado es similar a este:
address: 203.0.113.32 ...
Console
Para crear una dirección IP reservada, sigue estos pasos:
Ve a la página Direcciones IP externas en Cloud Console.
Especifica un nombre para la dirección IP (por ejemplo,
example-ip-address
).Especifica si deseas una dirección IPv4 o IPv6.
Selecciona la opción Global para Tipo.
Haga clic en Reservar. La dirección IP aparece en la columna Dirección externa.
Config Connector
Nota: En este paso, se necesita Config Connector. Sigue las instrucciones de instalación para instalar Config Connector en el clúster.
Para implementar este manifiesto, descárgalo en tu máquina comocompute-address.yaml
y ejecuta lo siguiente:kubectl apply -f compute-address.yaml
Configura un certificado administrado por Google
Crea un objeto
ManagedCertificate
. Este recurso especifica los dominios para el certificado SSL. Los dominios de comodín no son compatibles.El siguiente manifiesto describe un objeto
ManagedCertificate
. Guarda el manifiesto comomanaged-cert.yaml
.apiVersion: networking.gke.io/v1 kind: ManagedCertificate metadata: name: managed-cert spec: domains: - DOMAIN_NAME1 - DOMAIN_NAME2
Reemplaza lo siguiente:
DOMAIN_NAME1
yDOMAIN_NAME2
: son los nombres de dominio de tu propiedad. Por ejemplo,example.com
ywww.example.com
.
Aplica el manifiesto al clúster:
kubectl apply -f managed-cert.yaml
Crea un Service de tipo
NodePort
para exponer tu aplicación a Internet.En el siguiente manifiesto, se describe un Service de tipo
NodePort
. Guarda el manifiesto comomc-service.yaml
.apiVersion: v1 kind: Service metadata: name: mc-service spec: selector: app: mc-service type: NodePort ports: - protocol: TCP port: 80 targetPort: 8080
Aplica el manifiesto al clúster:
kubectl apply -f mc-service.yaml
Crea un Ingress.
En el siguiente manifiesto, se describe un Ingress que usa el
ManagedCertificate
que creaste. Guarda el manifiesto comomanaged-cert-ingress.yaml
.apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: managed-cert-ingress annotations: kubernetes.io/ingress.global-static-ip-name: ADDRESS_NAME networking.gke.io/managed-certificates: managed-cert kubernetes.io/ingress.class: "gce" spec: defaultBackend: service: name: mc-service port: number: SERVICE_PORT
Reemplaza lo siguiente:
ADDRESS_NAME
: nombre de la dirección IP reservada.SERVICE_PORT
: valor deports.port
en tu manifiesto de servicio.
Aplica el manifiesto al clúster:
kubectl apply -f managed-cert-ingress.yaml
Obtén la dirección IP del balanceador de cargas.
kubectl get ingress
El resultado es similar a este:
NAME HOSTS ADDRESS PORTS AGE example-ingress * 203.0.113.32 80 54s
La dirección IP del balanceador de cargas aparece en la columna
ADDRESS
. Si usas una dirección IP estática reservada, esa será la dirección del balanceador de cargas.Si la dirección no aparece en la lista, espera a que Ingress termine de configurarse.
Configura los registros DNS de tus dominios para que apunten a la dirección IP del balanceador de cargas. Si usas Cloud DNS, consulta Administra registros para obtener más información.
Espera a que el certificado administrado por Google termine de aprovisionar. Este proceso puede llevar hasta 60 minutos. Puedes verificar el estado del certificado con el siguiente comando:
kubectl describe managedcertificate managed-cert
El resultado es similar a este:
Name: managed-cert Namespace: default Labels: <none> Annotations: <none> API Version: networking.gke.io/v1 Kind: ManagedCertificate (...) Spec: Domains: DOMAIN_NAME1 DOMAIN_NAME2 Status: CertificateStatus: Active (...)
El valor del campo
Status.CertificateStatus
indica que se aprovisionó el certificado. SiStatus.CertificateStatus
no esActive
, el certificado aún no se aprovisionó.Para verificar que SSL funcione, visita los dominios con el prefijo
https://
. Tu navegador indica que la conexión es segura y puedes ver los detalles del certificado.
Migra a certificados administrados por Google desde certificados autoadministrados
Cuando migras un Ingress desde el uso de certificados SSL autoadministrados a certificados SSL administrados por Google, no debes borrar ningún certificado SSL autoadministrado antes de que los certificados SSL administrados por Google se activen. Una vez que los certificados SSL administrados por Google se aprovisionan de forma correcta, estos se activan de forma automática. Cuando los certificados SSL administrados por Google están activos, puedes borrar tus certificados SSL autoadministrados.
Usa estas instrucciones para migrar desde los certificados autoadministrados hasta los SSL administrados por Google.
- Agrega un nuevo certificado administrado por Google al Ingress, como se describe en la sección Configura un certificado administrado por Google.
Espera hasta que el estado del recurso del certificado administrado por Google sea Activo. Verifica el estado del certificado con el siguiente comando:
kubectl describe managedcertificate managed-cert
Cuando el estado sea
Active
, actualiza el Ingress para quitar las referencias al certificado autoadministrado.
Quita un certificado administrado por Google
Para quitar un certificado administrado por Google de tu clúster, debes borrar el objeto ManagedCertificate
y quitar la anotación de Ingress que hace referencia a él.
Borra el objeto
ManagedCertificate
:kubectl delete -f managed-cert.yaml
El resultado es similar a este:
managedcertificate.networking.gke.io "managed-cert" deleted
Quita la anotación del Ingress:
kubectl annotate ingress managed-cert-ingress networking.gke.io/managed-certificates-
Observa el signo menos,
-
, al final del comando.Libera la dirección IP estática que reservaste para tu balanceador de cargas.
Puedes usar Google Cloud CLI, Cloud Console o Config Connector para liberar una dirección IP reservada.
gcloud
Usa el siguiente comando para liberar la dirección IP reservada:
gcloud compute addresses delete ADDRESS_NAME --global
Reemplaza
ADDRESS_NAME
por el nombre de la dirección IP.Console
Para liberar la dirección IP reservada, sigue estos pasos:
Ve a la página Direcciones IP externas en Cloud Console.
Selecciona la casilla de verificación junto a la dirección IP que deseas liberar.
Haz clic en Liberar dirección IP.
Config Connector
Nota: En este paso, se necesita Config Connector. Sigue las instrucciones de instalación para instalar Config Connector en el clúster.
Para implementar este manifiesto, descárgalo en tu máquina como
compute-address.yaml
y ejecuta lo siguiente:kubectl delete -f compute-address.yaml
Soluciona problemas
En esta sección, se proporciona información para resolver problemas con los certificados administrados por Google.
Verifica eventos en ManagedCertificate
y recursos de Ingress
Si excedes la cantidad de certificados permitidos, se agrega un evento con un motivo TooManyCertificates
a ManagedCertificate
. Puedes verificar los eventos en un objeto ManagedCertificate
con el siguiente comando:
kubectl describe managedcertificate CERTIFICATE_NAME
Reemplaza CERTIFICATE_NAME
por el nombre del ManagedCertificate
.
Si conectas un ManagedCertificate
v1 no existente a un Ingress, se agrega un evento con un motivo MissingCertificate
al Ingress. Puedes verificar los eventos en un recurso Ingress con el siguiente comando:
kubectl describe ingress INGRESS_NAME
Reemplaza INGRESS_NAME
por el nombre de tu Ingress.
El certificado administrado no se aprovisiona cuando el dominio se resuelve en direcciones IP de varios balanceadores de cargas
Cuando tu dominio se resuelve en direcciones IP de varios balanceadores de cargas (varios objetos Ingress), debes crear un solo objeto ManagedCertificate
y adjuntarlo a todos los objetos Ingress. Si, en cambio, creas muchos objetos ManagedCertificate
y adjuntas cada uno a un Ingress distinto, es posible que la autoridad certificadora no pueda verificar la propiedad del dominio y algunos de tus certificados no lo hagan. Para que la verificación sea exitosa, el certificado debe estar visible en todas las direcciones IP a las que se resuelve el dominio.
De manera específica, cuando el dominio se resuelve en una dirección IPv4 y otra IPv6 configuradas con diferentes objetos del Ingress, debes crear un solo objeto de ManagedCertificate
y conectarlo a ambos Ingress.
Comunicación interrumpida entre los certificados administrados por Google e Ingress
Los certificados administrados se comunican con el Ingress mediante la anotación kubernetes.io/pre-shared-cert
. Puedes interrumpir esta comunicación, por ejemplo, si realizas estas acciones:
- Ejecutas un proceso automatizado que borre la anotación
kubernetes.io/pre-shared-cert
. - Almacenas una instantánea del Ingress y, luego, borras y restableces el Ingress a partir de la instantánea. Mientras tanto, es posible que se haya borrado un recurso
SslCertificate
que aparece en la anotación pre-shared-cert. Ingress no funciona si falta alguno de sus certificados adjuntos.
Si se interrumpe la comunicación entre los certificados administrados por Google e Ingress, borra el contenido de la anotación kubernetes.io/pre-shared-cert
y espera a que el sistema se concilie. Para evitar la recurrencia, asegúrate de que la anotación no se modifique ni se borre de forma involuntaria.
Errores de validación cuando se crea un certificado administrado por Google
Las definiciones de ManagedCertificate
se validan antes de crear el objeto ManagedCertificate
. Si la validación falla, el objeto ManagedCertificate
no se crea y se imprime un mensaje de error. A continuación, se explican los diferentes mensajes de error y los motivos:
spec.domains in body should have at most 100 items
El manifiesto ManagedCertificate
enumera más de 100 dominios en el campo spec.domains
. Los certificados administrados por Google solo admiten hasta 100 dominios.
spec.domains in body should match '^(([a-zA-Z0-9]+|[a-zA-Z0-9][-a-zA-Z0-9]*[a-zA-Z0-9])\.)+[a-zA-Z][-a-zA-Z0-9]*[a-zA-Z0-9]\.?$'
Especificaste un nombre de dominio no válido o un nombre de dominio comodín en el campo spec.domains
. El objeto ManagedCertificate
no admite dominios comodines (por ejemplo, *.example.com
).
spec.domains in body should be at most 63 chars long
Especificaste un nombre de dominio que es demasiado largo. Los certificados administrados por Google admiten nombres de dominio con un máximo de 63 caracteres.
Actualiza de manera manual un certificado administrado por Google
Para actualizar el certificado de forma manual a fin de que el certificado del dominio anterior continúe funcionando hasta que se aprovisione el certificado del dominio nuevo, sigue estos pasos:
- Crea un
ManagedCertificate
para el dominio nuevo. - Agrega el nombre de
ManagedCertificate
a la anotaciónnetworking.gke.io/managed-certificates
en el Ingress mediante una lista separada por comas. No quites el nombre del certificado anterior. - Espera hasta que
ManagedCertificate
se active. - Desconecta el certificado anterior del Ingress y bórralo.
Cuando creas un ManagedCertificate
, Google Cloud crea un certificado SSL administrado por Google. No puedes actualizar este certificado. Si actualizas el ManagedCertificate
, Google Cloud borra y vuelve a crear el certificado SSL administrado por Google.
¿Qué sigue?
- Obtén más información sobre los certificados administrados por Google.
- Obtén más información para configurar el balanceo de cargas HTTP(S) con Ingress.
- Obtén más información para usar varios certificados SSL en el balanceo de cargas HTTP(S) con Ingress.