En este tema, se explica cómo habilitar clientes sin SNI para usar con Apigee Hybrid.
Configura un cliente que no sea SNI
En esta sección, se explica cómo habilitar la asistencia para clientes que no sean SNI (Indicador del nombre del servidor) en Apigee Hybrid.
La SNI define cómo un par de TLS (cliente) especificará el nombre de host al que pretende conectarse durante el protocolo de enlace TLS inicial. La SNI forma parte de TLS desde 2003. Antes de la SNI, cuando un par de TLS enviaba un mensaje de HELLO para iniciar el protocolo de enlace, el par receptor siempre respondía con las mismas credenciales. Se introdujo SNI para permitir que un solo balanceador de cargas admita varios nombres de host y conjuntos de credenciales distintos para la administración de conexiones TLS. La SNI ahora la usa la gran mayoría de los clientes de TLS.
Hay excepciones. Por ejemplo, el balanceador de cargas de Google Cloud usará un handshake sin SNI para conectarse a los backends.
Si deseas configurar tu Apigee hybrid para que pueda controlar los handshake de TLS que no usan SNI, ya sea porque tu Apigee hybrid es un backend para un Cloud Load Balancer de Google o porque tu Apigee hybrid debe admitir algún otro cliente que no sea SNI, debes seguir los pasos que se describen a continuación. La negociación sin SNI actuará como alternativa. Apigee hybrid la usará para cualquier cliente que no use SNI.
- Crea un recurso
ApigeeRoute
. Asegúrate de queenableNonSniClient
esté configurado comotrue
:apiVersion: apigee.cloud.google.com/v1alpha1 kind: ApigeeRoute metadata: name: ROUTE_NAME namespace: APIGEE_NAMESPACE spec: hostnames: - "*" ports: - number: 443 protocol: HTTPS tls: credentialName: CREDENTIAL_NAME mode: SIMPLE #optional minProtocolVersion: TLS_AUTO selector: app: apigee-ingressgateway enableNonSniClient: true
Aquí:
- ROUTE_NAME es el nombre que asignas al recurso personalizado (CR).
- CREDENTIAL_NAME es el nombre de un Secret de Kubernetes implementado en el clúster que contiene credenciales TLS para tu host virtual. Puedes encontrar el nombre de la credencial con el siguiente comando
kubectl
:kubectl -n APIGEE_NAMESPACE get ApigeeRoutes -o=yaml | grep credentialName
hostnames
se debe establecer en el comodín "*".
- Abre tu archivo de anulación y realiza el cambio que se describe en el siguiente paso.
- Para cada grupo de entornos, agrega el nombre de ApigeeRoute a la propiedad
additionalGateways
. Por ejemplo:virtualhosts: - name: default sslCertPath: ./certs/fullchain.pem sslKeyPath: ./certs/privkey.pem additionalGateways: ["ROUTE_NAME"]
- Guarda el archivo CRD. Por ejemplo:
ApigeeRoute.yaml
- Aplica el CRD al clúster:
kubectl apply -f ApigeeRoute.yaml -n APIGEE_NAMESPACE
- Aplica el cambio a
virtualhosts
. Si configuraste la variable de entorno $ENV_GROUP en tu shell, puedes usarla en los siguientes comandos:helm upgrade $ENV_GROUP apigee-virtualhost/ \ --namespace APIGEE_NAMESPACE \ --atomic \ --set envgroup=$ENV_GROUP \ -f OVERRIDES_FILE.yaml
Notas de uso
- ¿Qué sucede si el clúster tiene más de una organización?
Dado que la entrada está a nivel del clúster para un puerto determinado (443), y solo puede haber un par clave-valor para la CRD de ApigeeRouter, todas las organizaciones deben compartir el mismo par de clave/certificado.
- ¿Qué sucede si el clúster tiene más de un grupo de entornos? ¿Funcionará si los hosts virtuales comparten el mismo par de claves o certificados?
Todos los nombres de host en todos los grupos de entornos deben usar el mismo par de clave/certificado.
- ¿Por qué crearemos una ApigeeRouter en lugar de Gateway?
ApigeeRoutes puede validar las rutas; sin embargo, la puerta de enlace (el CRD de Istio) no lo puede hacer. Técnicamente, incluso la puerta de enlace puede funcionar, pero podemos evitar posibles errores de configuración (a través de un webhook de validación).
- ¿Cómo puedo configurar clientes que no sean SNI para Apigee?
Si tu instancia de Apigee está expuesta a través de un balanceador de cargas de Google, este admite clientes que no son SNI, como se explica en la documentación del balanceo de cargas. De lo contrario, si expusiste una instancia de Apigee a través de un extremo de PSC interno o una VPC, de forma predeterminada, la instancia de Apigee admite clientes que no son SNI.