Gestión y exposición de apps en la red de servicios
Después de instalar el complemento de Istio en el clúster, puede desplegar las apps en la red de servicios de Istio configurando la inyección del componente proxy de Envoy y exponiendo las apps con un subdominio.
Descripción de la aplicación de ejemplo BookInfo
La aplicación de ejemplo BookInfo para Istio incluye la configuración básica de la demostración y las reglas de destino predeterminadas, para que puedas probar de inmediato las capacidades de Istio.
En Istio versión 1.4 y posteriores, BookInfo no se ofrece como complemento gestionado y se debe instalar por separado. Para instalar BookInfo, consulte Configuración de la app de ejemplo de BookInfo.
Los cuatro microservicios de BookInfo incluyen:
productpagellama a los microserviciosdetailsyreviewspara llenar la página.detailscontiene información sobre libros.ratingscontiene información sobre clasificación de libros que acompaña a una revisión de un libro.reviewscontiene reseñas de libros y llamadas al microservicioratings. El microservicioreviewstiene varias versiones:v1no llama al microservicioratings.v2llama al microservicioratingsy muestra clasificaciones como estrellas negras, de 1 a 5.v3llama al microservicioratingsy muestra clasificaciones como estrellas rojas, de 1 a 5.
Los archivos YAML de despliegue para cada uno de estos microservicios se modifican para que los proxies de complemento de Envoy se inyectan previamente como contenedores en los pods de los microservicios antes de que se desplieguen. Para obtener más información sobre la inyección manual de sidecar, consulta la documentación de Istio. La app BookInfo ya está también expuesta en una dirección IP pública mediante una pasarela de Istio. Aunque la app BookInfo puede ayudarle a ponerse en marcha, no está pensada para su uso en producción.
Configuración de la app de ejemplo de BookInfo
- Instale BookInfo en el clúster. Descargue el paquete de Istio más reciente para su sistema operativo, que incluye los archivos de configuración para la app de BookInfo.
curl -L https://istio.io/downloadIstio | ISTIO_VERSION=1.29.5 sh - - Vaya al directorio del paquete de Istio.
cd istio-1.29.5 - Etiquete el espacio de nombres
defaultpara la inyección de complementos.kubectl label namespace default istio-injection=enabled - Despliegue la aplicación de BookInfo, la pasarela y las reglas de destino.
kubectl apply -f samples/bookinfo/platform/kube/bookinfo.yaml kubectl apply -f samples/bookinfo/networking/bookinfo-gateway.yaml kubectl apply -f samples/bookinfo/networking/destination-rule-all.yaml - Asegúrese de que los microservicios de BookInfo y sus pods correspondientes están desplegados.
kubectl get svc kubectl get podsNAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE details ClusterIP 172.21.19.104 <none> 9080/TCP 2m kubernetes ClusterIP 172.21.0.1 <none> 443/TCP 1d productpage ClusterIP 172.21.168.196 <none> 9080/TCP 2m ratings ClusterIP 172.21.11.131 <none> 9080/TCP 2m reviews ClusterIP 172.21.117.164 <none> 9080/TCP 2m NAME READY STATUS RESTARTS AGE details-v1-6865b9b99d-7v9h8 2/2 Running 0 2m productpage-v1-f8c8fb8-tbsz9 2/2 Running 0 2m ratings-v1-77f657f55d-png6j 2/2 Running 0 2m reviews-v1-6b7f6db5c5-fdmbq 2/2 Running 0 2m reviews-v2-7ff5966b99-zflkv 2/2 Running 0 2m reviews-v3-5df889bcff-nlmjp 2/2 Running 0 2m
Acceso público a BookInfo
Obtenga la dirección pública del equilibrador de carga istio-ingressgateway que expone BookInfo.
Creación de un URL de pasarela en clústeres clásicos
- Establezca el host de entrada de Istio.
export INGRESS_IP=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.status.loadBalancer.ingress[0].ip}') - Establezca el puerto de entrada de Istio.
export INGRESS_PORT=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.spec.ports[?(@.name=="http2")].port}') - Cree una variable de entorno
GATEWAY_URLque utilice el host y el puerto de entrada de Ingress.export GATEWAY_URL=$INGRESS_IP:$INGRESS_PORT - Ejecute curl sobre la variable
GATEWAY_URLpara comprobar que la app BookInfo se está ejecutando. Una respuesta200significa que la app BookInfo se está ejecutando correctamente con Istio.curl -o /dev/null -s -w "%{http_code}\n" http://${GATEWAY_URL}/productpage - Intente renovar la página varias veces. Las diferentes versiones de la sección de revisiones se muestran con estrellas rojas, estrellas negras y sin estrellas.
Creación de un URL de pasarela en clústeres de VPC
- Cree una variable de entorno
GATEWAY_URLque utilice el nombre de host de Ingress de Istio.export GATEWAY_URL=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.status.loadBalancer.ingress[0].hostname}') - Ejecute curl sobre la variable
GATEWAY_URLpara comprobar que la app BookInfo se está ejecutando. Una respuesta200significa que la app BookInfo se está ejecutando correctamente con Istio.curl -o /dev/null -s -w "%{http_code}\n" http://${GATEWAY_URL}/productpage
Visualización de la página web de BookInfo en un navegador
Ejecute el mandato correspondiente a su sistema operativo para ver la aplicación BookInfo en el navegador.
Mac OS o Linux
open http://$GATEWAY_URL/productpage
Windows
start http://$GATEWAY_URL/productpage
Intente renovar la página varias veces. Las diferentes versiones de la sección de revisiones se muestran con estrellas rojas, estrellas negras y sin estrellas.
Exposición de BookInfo utilizando un subdominio proporcionado por IBM sin TLS
Cuando se habilita el complemento BookInfo en el clúster, se crea la pasarela de Istio bookinfo-gateway. La pasarela utiliza reglas de servicio virtual de Istio y de destino para configurar un equilibrador de carga, istio-ingressgateway,
que expone públicamente la app BookInfo. En los pasos siguientes, creará un subdominio para la dirección IP del equilibrador de carga istio-ingressgateway en clústeres clásicos a través del cual podrá acceder públicamente a
BookInfo.
- Registre la dirección IP en clústeres clásicos o el nombre de host en clústeres VPC para el equilibrador de carga
istio-ingressgatewaycreando un subdominio de DNS.- Clásico:
ibmcloud ks nlb-dns create classic --ip $INGRESS_IP --cluster <cluster_name_or_id> ``` * VPC: ```sh {: pre} ibmcloud ks nlb-dns create vpc-gen2 --lb-host $GATEWAY_URL --cluster <cluster_name_or_id> ``` - Verifique que se ha creado el subdominio y copie el subdominio.
ibmcloud ks nlb-dns ls --cluster <cluster_name_or_id>
Ejemplo de salida para clústeres clásicos
Hostname IP(s) Health Monitor SSL Cert Status SSL Cert Secret Name
mycluster-a1b2cdef345678g9hi012j3kl4567890-0001.us-south.containers.appdomain.cloud ["168.1.1.1"] None created <certificate>
Ejemplo de salida para clústeres de VPC
Subdomain Load Balancer Hostname Health Monitor SSL Cert Status SSL Cert Secret Name
mycluster-a1b2cdef345678g9hi012j3kl4567890-0001.us-south.containers.appdomain.cloud ["1234abcd-us-south.lb.appdomain.cloud"] None created <certificate>
En un navegador web, abra la página de productos de BookInfo. Puesto que no hay ningún TLS configurado, asegúrese de que utiliza HTTP.
http://<subdomain>/productpage
Intente renovar la página varias veces. Las solicitudes a http://<subdomain>/productpage las recibe el equilibrador de carga de pasarela de Istio. Las distintas versiones del microservicio reviews se siguen
devolviendo aleatoriamente porque la pasarela de Istio gestiona las reglas de direccionamiento de destino y servicio virtual para los microservicios.
Exposición de BookInfo utilizando un subdominio proporcionado por IBM con TLS
Cuando se habilita el complemento BookInfo en el clúster, se crea la pasarela de Istio bookinfo-gateway. La pasarela utiliza reglas de servicio virtual de Istio y de destino para configurar un equilibrador de carga, istio-ingressgateway,
que expone públicamente la app BookInfo. En los pasos siguientes, creará un subdominio para la dirección IP del equilibrador de carga istio-ingressgateway en clústeres clásicos a través del cual podrá acceder públicamente a
BookInfo. También puede utilizar el certificado SSL para habilitar las conexiones HTTPS con la app BookInfo.
-
Registre la dirección IP en clústeres clásicos o el nombre de host en clústeres VPC para el equilibrador de carga
istio-ingressgatewaycreando un subdominio de DNS.- Clásico:
ibmcloud ks nlb-dns create classic --ip $INGRESS_IP --secret-namespace istio-system --cluster <cluster_name_or_id> ``` * VPC: ```sh {: pre} ibmcloud ks nlb-dns create vpc-gen2 --lb-host $GATEWAY_URL --secret-namespace istio-system --cluster <cluster_name_or_id> ``` -
Verifique que se ha creado el subdominio y anote el nombre del secreto de SSL del campo SSL Cert Secret Name.
ibmcloud ks nlb-dns ls --cluster <cluster_name_or_id>Salida de ejemplo para clústeres clásicos.
Hostname IP(s) Health Monitor SSL Cert Status SSL Cert Secret Name mycluster-a1b2cdef345678g9hi012j3kl4567890-0001.us-south.containers.appdomain.cloud ["168.1.1.1"] None created <certificate>Ejemplo de salida para clústeres de VPC
Subdomain Load Balancer Hostname Health Monitor SSL Cert Status SSL Cert Secret Name mycluster-a1b2cdef345678g9hi012j3kl4567890-0001.us-south.containers.appdomain.cloud ["1234abcd-us-south.lb.appdomain.cloud"] None created <certificate>
Configuración de bookinfo-gateway para que utilice la terminación TLS
Siga estos pasos para configurar la terminación TLS para bookinfo-gateway.
- Suprima el
bookinfo-gatewayexistente, que no está configurado para manejar conexiones TLS.kubectl delete gateway bookinfo-gateway - Cree un nuevo archivo de configuración
bookinfo-gatewayque utilice la terminación TLS. Guarde el siguiente archivo YAML comobookinfo-gateway.yaml. Sustituya<secret_name>por el nombre del secreto SSL que ha encontrado anteriormente.apiVersion: networking.istio.io/v1alpha3 kind: Gateway metadata: name: bookinfo-gateway spec: selector: istio: ingressgateway servers: - port: number: 443 name: https protocol: HTTPS tls: mode: SIMPLE credentialName: <secret_name> hosts: - "*" - Cree el nuevo
bookinfo-gatewayen el clúster.kubectl apply -f bookinfo-gateway.yaml - En un navegador web, abra la página de productos de BookInfo. Asegúrese de que utiliza HTTPS para el subdominio que ha encontrado en el paso 2.
https://<subdomain>/productpage - Intente renovar la página varias veces. Las solicitudes a
https://<subdomain>/productpagelas recibe el equilibrador de carga de pasarela de Istio. Las distintas versiones del microservicioreviewsse siguen devolviendo aleatoriamente porque la pasarela de Istio gestiona las reglas de direccionamiento de destino y servicio virtual para los microservicios.
Visión general de lo que ha sucedido
El ejemplo BookInfo muestra cómo tres componentes de gestión del tráfico de Istio funcionan en combinación para direccionar el tráfico de entrada a la app.
Gateway- Gateway
bookinfo-gatewaydescribe un equilibrador de carga, el servicioistio-ingressgatewaydel espacio de nombresistio-systemque actúa como punto de entrada para el tráfico entrante de HTTP / TCP destinado a BookInfo. Istio configura el equilibrador de carga para que escuche las solicitudes entrantes a las apps gestionadas por Istio en los puertos definidos en el archivo de configuración de pasarela. Para ver el archivo de configuración de la pasarela de BookInfo, ejecute el mandato siguiente.
kubectl get gateway bookinfo-gateway -o yaml
VirtualService- El documento VirtualService
bookinfodefine las reglas que controlan cómo se enrutan las solicitudes dentro de la malla de servicios, definiendo los microservicios comodestinations. En el servicio virtualbookinfo, el URI/productpagede una solicitud se direcciona al hostproductpageen el puerto9080. De este modo, todas las solicitudes a la app BookInfo se direccionan primero al microservicioproductpage, que a continuación llama a los otros microservicios de BookInfo. Para ver la regla de servicio virtual, ejecute el mandato siguiente.
kubectl get virtualservice bookinfo -o yaml
DestinationRule- Una vez que la puerta de enlace ha enrutado la solicitud según la regla del servicio virtual, las políticas
details,productpage,ratings, y DestinationRulesreviewsdefinen las políticas que se aplican a la solicitud cuando esta llega a un microservicio. Por ejemplo, si renueva la página de productos de BookInfo, los cambios que verá son el resultado de que el microservicioproductpagellame aleatoriamente a distintas versiones,v1,v2yv3, del microservicioreviews. Las versiones se seleccionan aleatoriamente porque la regla de destinoreviewsotorga el mismo peso a lossubsets, o versiones con nombre, del microservicio. Las reglas del servicio virtual utilizan estos subconjuntos cuando se direcciona el tráfico a versiones específicas del servicio. Para ver las reglas de destino que se aplican a BookInfo, ejecute el mandato siguiente.
kubectl describe destinationrules
Inclusión de apps en la red de servicios de Istio mediante la configuración la inyección de complementos
¿Está listo para gestionar sus propias apps mediante Istio? Antes de desplegar la app, debe decidir cómo desea inyectar los complementos de proxy de Envoy en los pods de la app.
Cada pod de aplicación debe ejecutar un sidecar de proxy de Envoy para que los microservicios estén en la malla de servicios. Puede asegurarse de que los complementos se inyectan en cada pod de la app de forma automática o manual. Para obtener más información sobre la inyección de sidecar, consulta la documentación de Istio.
Habilitación de la inyección automática de complementos
Cuando la inyección automática de complementos está habilitada, un espacio de nombres escucha cualquier nuevo despliegue y modifica automáticamente la especificación de la plantilla de pod de forma que los pods de app se creen con contenedores de complementos de proxy de Envoy. Habilite la inyección automática de complementos para un espacio de nombres cuando vaya a desplegar varias apps que desee integrar con Istio en ese espacio de nombres. La inyección automática de complementos no está habilitada de forma predeterminada para ninguno de los espacios de nombres en el complemento gestionado de Istio.
No habilite la inyección de complementos para los espacios de nombres kube-system, ibm-system, ni ibm-operators.
Para habilitar la inyección automática de complementos para un espacio de nombres:
-
Obtenga el nombre del espacio de nombres en el que desea desplegar las apps gestionadas por Istio.
kubectl get namespaces -
Etiquete el espacio de nombres como
istio-injection=enabled.kubectl label namespace <namespace> istio-injection=enabled -
Despliegue las apps en el espacio de nombres etiquetado o vuelva a desplegar las apps que ya están en el espacio de nombres.
kubectl apply <myapp>.yaml --namespace <namespace> -
Opcional Para volver a desplegar una aplicación en el espacio de nombres, suprima el pod de la aplicación, a fin de que se vuelva a desplegar con el sidecar inyectado.
kubectl delete pod -l app=<myapp> -
Si no ha creado un servicio para exponer la aplicación, cree un servicio de Kubernetes. El servicio de Kubernetes debe exponer la app para incluirla como microservicio en la red de servicios de Istio. Asegúrese de cumplir los requisitos de Istio para los pods y los servicios.
-
Defina un servicio para la app.
apiVersion: v1 kind: Service metadata: name: myappservice spec: selector: <selector_key>: <selector_value> # Enter the label key `selector_key` and value `selector_value` pair that you want to use to target the pods where your app runs. ports: - protocol: TCP port: 8080 # The port that the service listens on -
Cree el servicio en el clúster. Asegúrese de que el servicio se despliega en el mismo espacio de nombres que la app.
kubectl apply -f myappservice.yaml -n <namespace>
Los pods de la app están ahora integrados en la red de servicios de Istio porque tienen el contenedor de complementos de Istio que se ejecutan junto con el contenedor de la app.
Inyección manual de complementos
Si no quiere habilitar la inyección automática de sidecar para un espacio de nombres, puede inyectar manualmente el sidecar en un archivo YAML de despliegue. Inyecte sidecars manualmente cuando las aplicaciones se ejecuten en espacios de nombres junto con otros despliegues en los que no desea que se inyecten automáticamente los sidecars.
No habilite la inyección de complementos para los espacios de nombres kube-system, ibm-system, ni ibm-operators.
- Descargue el cliente
istioctl.curl -L https://istio.io/downloadIstio | sh - - Vaya al directorio del paquete de Istio.
cd istio-1.29.5
Para inyectar manualmente complementos en un despliegue:
-
Inyecte el complemento Envoy en el archivo YAML de despliegue de la app.
istioctl kube-inject -f <myapp>.yaml | kubectl apply -f - -
Desplegar la app.
kubectl apply <myapp>.yaml -
Si no ha creado un servicio para exponer la aplicación, cree un servicio de Kubernetes. El servicio de Kubernetes debe exponer la app para incluirla como microservicio en la red de servicios de Istio. Asegúrese de cumplir los requisitos de Istio para los pods y los servicios.
-
Defina un servicio para la app.
apiVersion: v1 kind: Service metadata: name: myappservice spec: selector: <selector_key>: <selector_value> # Enter the label key `selector_key` and value `selector_value` pair that you want to use to target the pods where your app runs. ports: - protocol: TCP port: 8080 # The port that the service listens on. -
Cree el servicio en el clúster. Asegúrese de que el servicio se despliega en el mismo espacio de nombres que la app.
kubectl apply -f myappservice.yaml -n <namespace>
Los pods de la app están ahora integrados en la red de servicios de Istio porque tienen el contenedor de complementos de Istio que se ejecutan junto con el contenedor de la app.
Activación o desactivación de los equilibradores de carga públicos Istio en addon-istio 1.23
De forma predeterminada, un equilibrador de carga de Istio público, istio-ingressgateway, está habilitado en el clúster para equilibrar la carga de las solicitudes de entrada procedentes de internet destinadas a las apps gestionadas
por Istio. Puede obtener una mayor disponibilidad si habilita un equilibrador de carga de Istio en cada zona del clúster.
-
Edite el recurso de mapa de configuración
managed-istio-custom.kubectl edit cm managed-istio-custom -n ibm-operators -
Verifique que todas las zonas de clúster estén en los campos
istio-ingressgateway-zone.Ejemplo para un clúster clásico multizona en Dallas:
istio-ingressgateway-zone-1: "dal10" istio-ingressgateway-zone-2: "dal12" istio-ingressgateway-zone-3: "dal13" -
Habilite o inhabilite un equilibrador de carga de Istio en cada zona estableciendo los campos
istio-ingressgateway-public-1|2|3-enableden"true"o"false".Si desea que las apps sean accesibles para los clientes, asegúrese de que al menos un equilibrador de carga esté habilitado o cree equilibradores de carga de pasarela personalizados. Si inhabilita todos los equilibradores de carga en todas las zonas, su aplicación ya no está expuesta y no se puede acceder a ella externamente.
Ejemplo para habilitar una pasarela pública en cada zona:
istio-ingressgateway-public-1-enabled: "true" istio-ingressgateway-public-2-enabled: "true" istio-ingressgateway-public-3-enabled: "true" -
Guarde y cierre el archivo de configuración.
-
Verifique que se han creado los nuevos servicios del equilibrador de carga
istio-ingressgateway.kubectl get svc -n istio-system
Para exponer las apps gestionadas por Istio mediante los servicios del equilibrador de carga istio-ingressgateway, especifique el selector istio: ingressgateway en el recurso Gateway. Para obtener más información,
consulte Exposición de apps gestionadas por Istio.
Exposición de la pasarela ingress de Istio con DNS
Exponga públicamente sus apps gestionadas por Istio creando una entrada de DNS para el equilibrador de carga istio-ingressgateway y configurando el equilibrador de carga para reenviar el tráfico a la app.
En los pasos siguientes, debe configurar un nombre de subdominio mediante el cual los usuarios pueden acceder a la app creando los recursos siguientes:
- Una pasarela denominada
my-gateway. Esta pasarela actúa como el punto de entrada público en sus apps y utiliza el servicio de equilibrador de cargaistio-ingressgatewayexistente para exponer la app. La pasarela se puede configurar opcionalmente para la terminación de TLS. - Un servicio virtual denominado
my-virtual-service.my-gatewayutiliza las reglas que define enmy-virtual-servicepara direccionar el tráfico a la aplicación. - Un subdominio para el equilibrador de carga
istio-ingressgateway. Todas las solicitudes de usuario para el subdominio se reenvían a la app de acuerdo con las reglas de direccionamiento demy-virtual-service.
Exposición de la pasarela ingress de Istio con DNS sin terminación TLS
- Instale el complemento gestionado
istioen un clúster. - Instale la CLI de
istioctl. - Configure la inyección de sidecar para los microservicios de aplicaciones, despliegue los microservicios de aplicaciones en un espacio de nombres y cree servicios de Kubernetes para que los microservicios de aplicaciones estén en la malla de servicios de Istio.
Para exponer apps públicamente:
-
Cree una pasarela que utilice el servicio de equilibrador de carga
istio-ingressgatewaypúblico para exponer el puerto 80 para HTTP. Sustituya<namespace>por el espacio de nombres en el que se despliegan los microservicios gestionados por Istio. Para obtener más información sobre los componentes YAML de la pasarela, consulta la documentación de referencia de Istio.apiVersion: networking.istio.io/v1alpha3 kind: Gateway metadata: name: my-gateway spec: selector: app: ingressgateway servers: - port: number: 80 name: http protocol: HTTP hosts: - "*" -
Aplique la pasarela en el espacio de nombres en el que se han desplegado los microservicios gestionados por Istio.
kubectl apply -f my-gateway.yaml -n <namespace> -
Cree un servicio virtual que utilice la pasarela
my-gatewayy defina las reglas de direccionamiento para los microservicios de la app. Si los microservicios escuchan en un puerto distinto al80, añada dicho puerto. Para obtener más información sobre los componentes YAML de los servicios virtuales, consulta la documentación de referencia de Istio.apiVersion: networking.istio.io/v1beta1 kind: VirtualService metadata: name: my-virtual-service namespace: <namespace> # The namespace where your Istio-managed microservices are deployed. spec: gateways: - my-gateway # `my-gateway` is specified so that the gateway can apply these virtual service routing rules to the `istio-ingressgateway` load balancer. hosts: - '*' http: - match: - uri: exact: /<service_path> # Replace `service_path` with the path that your entrypoint microservice listens on. For example, in the BookInfo app, the path is defined as `/productpage`. route: - destination: host: <service_name> # Replace `service_name` with the name of your entrypoint microservice. For example, in the BookInfo app, `productpage` served as the entrypoint microservice that called the other app microservices. port: number: 80 # If your microservice listens on a different port, replace `80` with the port. -
Aplique las reglas de servicio virtual en el espacio de nombres en el que se ha desplegado el microservicio gestionado por Istio.
kubectl apply -f my-virtual-service.yaml -n <namespace> -
Obtenga la dirección EXTERNAL-IP (clústeres clásicos) o el nombre de host (clústeres de VPC) para el equilibrador de carga público
istio-ingressgateway. Si ha habilitado un equilibrador de carga de Istio en cada zona del clúster, obtenga la dirección IP o el nombre de host del servicio de equilibrador de carga en cada zona.kubectl get svc -n istio-system# Example output for classic clusters istio-ingressgateway LoadBalancer 172.21.XXX.XXX 169.1.1.1 80:31380/TCP,443:31390/TCP,31400:31400/TCP,5011:31323/TCP,8060:32483/TCP,853:32628/TCP,15030:31601/TCP,15031:31915/TCP 22m# Example output for VPC clusters: istio-ingressgateway LoadBalancer 172.21.XXX.XXX 1234abcd-us-south.lb.appdomain.cloud 80:31380/TCP,443:31390/TCP,31400:31400/TCP,5011:31323/TCP,8060:32483/TCP,853:32628/TCP,15030:31601/TCP,15031:31915/TCP 22m -
Registre la dirección IP o el nombre de host del equilibrador de carga creando un subdominio de DNS. Para obtener más información sobre el registro de subdominios DNS en IBM Cloud Kubernetes Service, consulte Clásico: Registro de un subdominio NLB o información sobre el registro de un nombre de host de equilibrador de carga VPC con un subdominio DNS para un VPC ALB o VPC NLB.
ibmcloud ks nlb-dns create classic --cluster <cluster_name_or_id> --ip <LB_IP> [--ip <LB_zone2_IP> ...]Ejemplo comando para clústeres de VPC.
ibmcloud ks nlb-dns create vpc-gen2 -c <cluster_name_or_ID> --lb-host <LB_hostname> -
Verifique que se ha creado el subdominio. En la salida, copie el nombre del secreto de SSL del campo SSL Cert Secret Name.
ibmcloud ks nlb-dns ls --cluster <cluster_name_or_id>Salida de ejemplo para clústeres clásicos.
Hostname IP(s) Health Monitor SSL Cert Status SSL Cert Secret Name mycluster-a1b2cdef345678g9hi012j3kl4567890-0001.us-south.containers.appdomain.cloud ["168.1.1.1"] None created <certificate>Ejemplo de resultado para clústeres VPC.
Subdomain Load Balancer Hostname Health Monitor SSL Cert Status SSL Cert Secret Name mycluster-a1b2cdef345678g9hi012j3kl4567890-0001.us-south.containers.appdomain.cloud ["1234abcd-us-south.lb.appdomain.cloud"] None created <certificate> -
Compruebe que el tráfico se está direccionando a los microservicios gestionados por Istio especificando el URL del microservicio de la app.
http://<host_name>/<service_path>
¿Busca un control aún más detallado sobre el direccionamiento? Para crear reglas que se apliquen después de que el equilibrador de carga dirija el tráfico a cada microservicio, como reglas para enviar el tráfico a diferentes versiones de un
mismo microservicio, puede crear y aplicar DestinationRules.
¿Necesita depurar las configuraciones de entrada o de salida? Asegúrese de que la opción istio-global-proxy-accessLogFile del mapa de configuración managed-istio-custom esté establecida en "/dev/stdout". Los proxies de Envoy imprimen información de acceso en su salida estándar, que puede ver ejecutando mandatos kubectl logs para los contenedores de Envoy. Si observa que
el pod ibm-cloud-provider-ip para una pasarela está atascado en pending, consulte este tema de resolución de problemas.
Exposición de la pasarela ingress de Istio con DNS con terminación TLS
- Instale el complemento gestionado
istioen un clúster. - Instale la CLI de
istioctl. - Configure la inyección de sidecar para los microservicios de aplicaciones, despliegue los microservicios de aplicaciones en un espacio de nombres y cree servicios de Kubernetes para que los microservicios de aplicaciones estén en la malla de servicios de Istio.
Para exponer apps públicamente:
-
Registre la dirección IP o el nombre de host del equilibrador de carga creando un subdominio de DNS. Para obtener más información sobre cómo registrar subdominios de DNS en IBM Cloud Kubernetes Service, consulte Clásico: Registro de un subdominio de NLB o Registro de un nombre de host de equilibrador de carga de VPC con un subdominio de DNS.
- Clústeres clásicos:
ibmcloud ks nlb-dns create classic --cluster <cluster_name_or_id> --ip <LB_IP> [--ip <LB_zone2_IP> ...] ``` * Clústeres VPC: ```sh {: pre} ibmcloud ks nlb-dns create vpc-gen2 -c <cluster_name_or_ID> --lb-host <LB_hostname> ``` -
Verifique que se ha creado el subdominio. En la salida, copie el nombre del secreto de SSL del campo SSL Cert Secret Name.
ibmcloud ks nlb-dns ls --cluster <cluster_name_or_id># Example output for classic clusters: Hostname IP(s) Health Monitor SSL Cert Status SSL Cert Secret Name mycluster-a1b2cdef345678g9hi012j3kl4567890-0001.us-south.containers.appdomain.cloud ["168.1.1.1"] None created <certificate># Example output for VPC clusters: Subdomain Load Balancer Hostname Health Monitor SSL Cert Status SSL Cert Secret Name mycluster-a1b2cdef345678g9hi012j3kl4567890-0001.us-south.containers.appdomain.cloud ["1234abcd-us-south.lb.appdomain.cloud"] None created <certificate> -
Cree una pasarela que utilice el servicio de equilibrador de carga
istio-ingressgatewaypúblico para exponer el puerto 80 para HTTP. Sustituya<namespace>por el espacio de nombres en el que se despliegan los microservicios gestionados por Istio. Para obtener más información sobre los componentes YAML de la pasarela, consulta la documentación de referencia de Istio.apiVersion: networking.istio.io/v1alpha3 kind: Gateway metadata: name: my-gateway namespace: <namespace> spec: selector: istio: ingressgateway servers: - port: name: https protocol: HTTPS number: 443 tls: mode: SIMPLE serverCertificate: /etc/istio/ingressgateway-certs/tls.crt privateKey: /etc/istio/ingressgateway-certs/tls.key hosts: - "*" -
Aplique la pasarela en el espacio de nombres en el que se han desplegado los microservicios gestionados por Istio.
kubectl apply -f my-gateway.yaml -n <namespace> -
Cree un servicio virtual que utilice la pasarela
my-gatewayy defina las reglas de direccionamiento para los microservicios de la app. Para obtener más información sobre los componentes YAML de los servicios virtuales, consulta la documentación de referencia de Istio.apiVersion: networking.istio.io/v1beta1 kind: VirtualService metadata: name: my-virtual-service namespace: <namespace> # The namespace where your Istio-managed microservices are deployed. spec: gateways: - my-gateway # `my-gateway` is specified so that the gateway can apply these virtual service routing rules to the `istio-ingressgateway` load balancer. hosts: - '*' http: - match: - uri: exact: /<service_path> # Replace `service_path` with the path that your entrypoint microservice listens on. For example, in the BookInfo app, the path is defined as `/productpage`. route: - destination: host: <service_name> # The name of your entrypoint microservice. For example, in the BookInfo app, `productpage` served as the entrypoint microservice that called the other app microservices. port: number: 443 # If your microservice listens on a different port, replace 443 with the port. -
Aplique las reglas de servicio virtual en el espacio de nombres en el que se ha desplegado el microservicio gestionado por Istio.
kubectl apply -f my-virtual-service.yaml -n <namespace> -
Obtenga la dirección EXTERNAL-IP (clústeres clásicos) o el nombre de host (clústeres de VPC) para el equilibrador de carga público
istio-ingressgateway. Si ha habilitado un equilibrador de carga de Istio en cada zona del clúster, obtenga la dirección IP o el nombre de host del servicio de equilibrador de carga en cada zona.kubectl get svc -n istio-system# Example output for classic clusters: istio-ingressgateway LoadBalancer 172.21.XXX.XXX 169.1.1.1 80:31380/TCP,443:31390/TCP,31400:31400/TCP,5011:31323/TCP,8060:32483/TCP,853:32628/TCP,15030:31601/TCP,15031:31915/TCP 22m# Example output for VPC clusters: istio-ingressgateway LoadBalancer 172.21.XXX.XXX 1234abcd-us-south.lb.appdomain.cloud 80:31380/TCP,443:31390/TCP,31400:31400/TCP,5011:31323/TCP,8060:32483/TCP,853:32628/TCP,15030:31601/TCP,15031:31915/TCP 22m -
Compruebe que el tráfico se está direccionando a los microservicios gestionados por Istio especificando el URL del microservicio de la app.
https://<host_name>/<service_path>
Los certificados para el secreto de host de DNS de NLB caducan cada 90 días. IBM Cloud Kubernetes Service renueva automáticamente el secreto del espacio de nombres predeterminado 37 días antes de que caduque, pero debe copiar manualmente el
secreto en el espacio de nombres istio-system cada vez que se renueve el secreto. Utilice scripts para automatizar este proceso.
¿Busca un control aún más detallado sobre el direccionamiento? Para crear reglas que se apliquen después de que el equilibrador de carga dirija el tráfico a cada microservicio, como reglas para enviar el tráfico a diferentes versiones de un
mismo microservicio, puede crear y aplicar DestinationRules.
¿Necesita depurar las configuraciones de entrada o de salida? Asegúrese de que la opción istio-global-proxy-accessLogFile del mapa de configuración managed-istio-custom esté establecida en "/dev/stdout". Los proxies de Envoy imprimen información de acceso en su salida estándar, que puede ver ejecutando mandatos kubectl logs para los contenedores de Envoy. Si observa que
el pod ibm-cloud-provider-ip para una pasarela está atascado en pending, consulte este tema de resolución de problemas.
Protección del tráfico interno del clúster mediante la habilitación de mTLS
Habilite el cifrado para las cargas de trabajo en un espacio de nombres para conseguir el TLS mutuo (mTLS) dentro del clúster. El tráfico que direcciona Envoy entre los pods del clúster se cifra con TLS. Istio se encarga de la gestión de certificados para mTLS. Para más información, consulte la documentación de Istio mutual TLS.
- Cree un archivo de política de autenticación que se denomina
default.yaml. Esta política está limitada al espacio de nombres y configura cargas de trabajo en la red de servicios de modo que solo acepten las solicitudes cifradas con TLS. Observe que no se incluyen especificaciones de destino (targets) porque la política se aplica a todos los servicios de la red en este espacio de nombres.apiVersion: "security.istio.io/v1beta1" kind: "PeerAuthentication" metadata: name: "default" spec: mtls: mode: STRICT - Aplique la política de autenticación a un espacio de nombres.
kubectl apply -f default.yaml -n NAMESPACE - Cree un archivo de reglas de destino llamado
destination-mtls.yaml. Esta política configura las cargas de trabajo de la red de servicios en un espacio de nombres de modo que envíen el tráfico mediante TLS. Observe que el carácter comodínhost: *.localaplica esta regla de destino a todos los servicios de la red.apiVersion: "networking.istio.io/v1beta1" kind: "DestinationRule" metadata: name: "destination-mtls" spec: host: "*.local" trafficPolicy: tls: mode: ISTIO_MUTUAL - Aplique la regla de destino.
kubectl apply -f destination-mtls.yaml -n NAMESPACE - Si desea aplicar mTLS a las cargas de trabajo de malla de servicios en otros espacios de nombres, repita estos pasos en cada espacio de nombres.
Las reglas de destino también se utilizan por motivos no relacionados con la autenticación, como por ejemplo para direccionar el tráfico a diferentes versiones de un servicio. Cualquier regla de destino que cree para un servicio también debe
contener el mismo bloque TLS que está establecido en mode: ISTIO_MUTUAL. Este bloque impide que la regla altere modifique los valores de mTSL de la red que ha configurado en esta sección.