Descarga SSL con Puerta de enlace de aplicaciones para contenedores: API de puerta de enlace
Este documento ayuda a configurar una aplicación de ejemplo que usa los siguientes recursos de la API de puerta de enlace. Se proporcionan pasos para:
- Cree un recurso de puerta de enlace con un cliente de escucha HTTPS.
- Cree un HTTPRoute que haga referencia a un servicio back-end.
Fondo
Puerta de enlace de aplicaciones para contenedores permite la descarga de SSL para mejorar el rendimiento del back-end. Consulte el siguiente escenario de ejemplo:
Requisitos previos
Si sigue la estrategia Traiga su propia (BYO) implementación, asegúrese de configurar los recursos de Puerta de enlace de aplicaciones para contenedores y del controlador de ALB.
Si sigue la estrategia de implementación administrada de ALB, asegúrese de aprovisionar su controlador de ALB y los recursos de Puerta de enlace de aplicaciones para contenedores mediante el recurso personalizado ApplicationLoadBalancer.
Implementar una aplicación HTTPS de ejemplo: aplique el siguiente archivo deployment.yaml en el clúster para crear una aplicación web de ejemplo para mostrar la descarga TLS/SSL.
kubectl apply -f https://raw.githubusercontent.com/MicrosoftDocs/azure-docs/refs/heads/main/articles/application-gateway/for-containers/examples/https-scenario/ssl-termination/deployment.yaml
Este comando crea lo siguiente en el clúster:
- un espacio de nombres denominado
test-infra
- un servicio llamado
echo
en el espacio de nombrestest-infra
- una implementación llamada
echo
en el espacio de nombrestest-infra
- un secreto llamado
listener-tls-secret
en el espacio de nombrestest-infra
- un espacio de nombres denominado
Implementación de los recursos necesarios de la API de puerta de enlace
Creación de una puerta de enlace
kubectl apply -f - <<EOF apiVersion: gateway.networking.k8s.io/v1 kind: Gateway metadata: name: gateway-01 namespace: test-infra annotations: alb.networking.azure.io/alb-namespace: alb-test-infra alb.networking.azure.io/alb-name: alb-test spec: gatewayClassName: azure-alb-external listeners: - name: https-listener port: 443 protocol: HTTPS allowedRoutes: namespaces: from: Same tls: mode: Terminate certificateRefs: - kind : Secret group: "" name: listener-tls-secret EOF
Nota:
Cuando el controlador de ALB cree los recursos de Puerta de enlace de aplicaciones para contenedores en ARM, usará las siguientes convenciones de nomenclatura para un recurso de frontend: fe-<8 caracteres generados aleatoriamente>
Si desea cambiar el nombre del frontend creado en Azure, considere la posibilidad de seguir la estrategia Traiga su propia implementación.
Cuando cree el recurso de puerta de enlace, asegúrese de que el estado sea válido, de que el cliente de escucha sea de tipo Programado y de que se haya asignado una dirección a la puerta de enlace.
kubectl get gateway gateway-01 -n test-infra -o yaml
Salida de ejemplo de la creación correcta de la puerta de enlace.
status:
addresses:
- type: Hostname
value: xxxx.yyyy.alb.azure.com
conditions:
- lastTransitionTime: "2023-06-19T21:04:55Z"
message: Valid Gateway
observedGeneration: 1
reason: Accepted
status: "True"
type: Accepted
- lastTransitionTime: "2023-06-19T21:04:55Z"
message: Application Gateway For Containers resource has been successfully updated.
observedGeneration: 1
reason: Programmed
status: "True"
type: Programmed
listeners:
- attachedRoutes: 0
conditions:
- lastTransitionTime: "2023-06-19T21:04:55Z"
message: ""
observedGeneration: 1
reason: ResolvedRefs
status: "True"
type: ResolvedRefs
- lastTransitionTime: "2023-06-19T21:04:55Z"
message: Listener is accepted
observedGeneration: 1
reason: Accepted
status: "True"
type: Accepted
- lastTransitionTime: "2023-06-19T21:04:55Z"
message: Application Gateway For Containers resource has been successfully updated.
observedGeneration: 1
reason: Programmed
status: "True"
type: Programmed
name: https-listener
supportedKinds:
- group: gateway.networking.k8s.io
kind: HTTPRoute
Una vez creada la puerta de enlace, cree un recurso HTTPRoute.
kubectl apply -f - <<EOF
apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:
name: https-route
namespace: test-infra
spec:
parentRefs:
- name: gateway-01
rules:
- backendRefs:
- name: echo
port: 80
EOF
Una vez creado el recurso HTTPRoute, asegúrese de que la ruta se haya aceptado y de que el recurso de Puerta de enlace de aplicaciones para contenedores se haya programado.
kubectl get httproute https-route -n test-infra -o yaml
Compruebe que el recurso de Puerta de enlace de aplicaciones para contenedores se ha actualizado correctamente.
status:
parents:
- conditions:
- lastTransitionTime: "2023-06-19T22:18:23Z"
message: ""
observedGeneration: 1
reason: ResolvedRefs
status: "True"
type: ResolvedRefs
- lastTransitionTime: "2023-06-19T22:18:23Z"
message: Route is Accepted
observedGeneration: 1
reason: Accepted
status: "True"
type: Accepted
- lastTransitionTime: "2023-06-19T22:18:23Z"
message: Application Gateway For Containers resource has been successfully updated.
observedGeneration: 1
reason: Programmed
status: "True"
type: Programmed
controllerName: alb.networking.azure.io/alb-controller
parentRef:
group: gateway.networking.k8s.io
kind: Gateway
name: gateway-01
namespace: test-infra
Prueba de acceso a la aplicación
Ahora, estamos listos para enviar tráfico a nuestra aplicación de ejemplo mediante el FQDN asignado al frontend. Utilice el siguiente comando para obtener el FQDN.
fqdn=$(kubectl get gateway gateway-01 -n test-infra -o jsonpath='{.status.addresses[0].value}')
La consulta de este FQDN debería devolver respuestas del backend tal y como está configurado en HTTPRoute.
curl --insecure https://$fqdn/
Enhorabuena, ha instalado el controlador de ALB, ha implementado una aplicación de back-end y enrutado el tráfico a la aplicación a través de la entrada en una puerta de enlace de aplicaciones para contenedores.