Si desea usar un nombre de dominio personalizado para un servicio de Knative, se recomienda configurar un certificado HTTPS para dicho dominio con el fin de mejorar la seguridad en la transmisión de datos. Knative le permite especificar un certificado HTTPS mediante la configuración de un DomainMapping, el cual asocia de forma segura un servicio de Knative con el nombre de dominio personalizado.
Requisitos previos
Knative debe estar desplegado en su clúster de ACS. Para obtener más información, consulte Deploy Knative.
Paso 1: Cree un servicio de Knative
Inicie sesión en la consola de Container Compute Service (ACS). En el panel de navegación izquierdo, haga clic en Clusters.
En la página Clusters, haga clic en el nombre del clúster de destino. En el panel de navegación izquierdo de la página de detalles del clúster, elija Applications > Knative.
En la pestaña Services de la página Knative, establezca Namespace en default y, a continuación, haga clic en Create from Template para crear un servicio de Knative (el servicio
helloworld-go) a partir de la plantilla de ejemplo de la consola. Complete la creación según las instrucciones. Una vez creado el servicio, su estado aparecerá como exitoso en la pestaña de servicios y su nombre de dominio predeterminado seráhelloworld-go.default.example.com. Antes de acceder al servicio, debe vincular el nombre de dominio de acceso al gateway de entrada como Host.
Paso 2: Configure el servicio HTTPS
La forma de configurar HTTPS depende del tipo de gateway:
Gateway ALB: AlbConfig gestiona los certificados de manera centralizada. Se habilita TLS mediante una anotación, sin necesidad de administrar manualmente los archivos de certificado.
Gateway Kourier: Debe crear manualmente un Secret de certificado y luego vincularlo al nombre de dominio mediante un DomainMapping.
ALB
Puede especificar un certificado en AlbConfig y habilitar el acceso TLS en el servicio de Knative mediante la anotación knative.k8s.alibabacloud/tls: "true". Consulte el siguiente ejemplo.
Para habilitar el acceso HTTPS, agregue la anotación TLS al servicio de Knative y configure un listener en el puerto 443 dentro de AlbConfig.
-
Agregue la anotación
knative.k8s.alibabacloud/tls: "true"al archivo YAML del servicio de Knative.apiVersion: serving.knative.dev/v1 kind: Service metadata: name: helloworld namespace: default annotations: knative.k8s.alibabacloud/tls: "true" spec: template: spec: containers: - image: registry-vpc.cn-shenzhen.aliyuncs.com/knative-sample/helloworld-go:73fbdd56 # Replace the region with the region that you actually use. env: - name: TARGET value: "Knative" -
Agregue un listener en el puerto 443 dentro de AlbConfig (por ejemplo,
knative-internet) para enrutar el tráfico HTTPS hacia el clúster.apiVersion: alibabacloud.com/v1 kind: AlbConfig metadata: name: knative-internet spec: config: ... listeners: - port: 443 # Valid values: HTTP, HTTPS, QUIC protocol: HTTPS ... -
Compruebe que el servicio sea accesible mediante HTTPS.
# Replace alb-ppcate4ox6******.cn-beijing.alb.aliyuncs.com with your ALB gateway address. curl -H "Host: helloworld.knative.top" https://alb-ppcate4ox6******.cn-beijing.alb.aliyuncs.com -kResultado esperado:
Hello Knative!
Kourier
El gateway Kourier no incluye gestión de certificados integrada. Primero debe almacenar el certificado TLS en el clúster como un Secret. Una vez listo, vincule el nombre de dominio al certificado mediante un DomainMapping.
1. Cree un Secret de certificado
El siguiente ejemplo utiliza un certificado HTTPS autofirmado generado con OpenSSL. Si ya cuenta con archivos de certificado en formato .pem, puede omitir el paso 1 y comenzar desde el paso 2.
Los certificados autofirmados son únicamente para pruebas. En entornos de producción, se recomienda utilizar certificados emitidos por una autoridad certificadora (CA).
-
Cree un certificado autofirmado con OpenSSL.
openssl genrsa -out knativetop-key.pem 4096 openssl req -subj "/CN=helloworld.knative.top" -sha256 -new -key knativetop-key.pem -out knativetop.csr echo subjectAltName = DNS:helloworld.knative.top > extfile.cnf openssl x509 -req -days 3650 -sha256 -in knativetop.csr -signkey knativetop-key.pem -out knativetop-cert.pem -extfile extfile.cnfResultado esperado:
Signature ok subject=CN = helloworld.knative.top Getting Private key -
Codifique en Base64 los archivos
knativetop-key.pemyknativetop-cert.pemcreados en el paso 1.-
Codifique
knativetop-key.pemen Base64.cat knativetop-key.pem | base64Resultado esperado:
a25hdGl2ZXRvcC1r****** -
Codifique
knativetop-cert.pemen Base64.cat knativetop-cert.pem | base64Resultado esperado:
a25hdGl2ZXRvcC1jZ******==
-
-
Cree el Secret. Este recurso se utilizará en la configuración TLS del servicio de Knative para habilitar el acceso seguro al nombre de dominio
helloworld.knative.top.kubectl create secret tls secret-tls --key knativetop-key.pem --cert knativetop-cert.pemResultado esperado:
secret/secret-tls created
2. Cree un DomainMapping
En Knative, un DomainMapping es un objeto de recurso que asocia un nombre de dominio con uno o más servicios de Knative. Cuando el Secret esté listo, utilice un DomainMapping para vincular el nombre de dominio personalizado al servicio de Knative y haga referencia al Secret creado previamente para habilitar el cifrado TLS.
-
Cree el archivo
helloworld.knative.top.yamlcon el siguiente contenido.apiVersion: serving.knative.dev/v1beta1 kind: DomainMapping metadata: name: helloworld.knative.top namespace: default spec: ref: name: helloworld-go kind: Service apiVersion: serving.knative.dev/v1 # The tls block specifies the secret to be used. tls: secretName: secret-tls -
Aplique el DomainMapping al clúster.
kubectl apply -f helloworld.knative.top.yamlResultado esperado:
domainmapping.serving.knative.dev/helloworld.knative.top created -
Ejecute el siguiente comando para comprobar que el DomainMapping está listo.
kubectl get domainmapping helloworld.knative.topResultado esperado:
NAME URL READY REASON helloworld.knative.top https://helloworld.knative.top True -
Compruebe que el servicio sea accesible a través del nombre de dominio personalizado.
# 8.141.XX.XX is the Kourier gateway address. curl -H "Host: helloworld-go.default.example.com" http://8.141.XX.XX -kResultado esperado:
Hello Knative!
Referencias
Es posible configurar probes para supervisar el estado y la disponibilidad de sus servicios de Knative. Para obtener más información, consulte Configure port probing in Knative.