Un recurso de entrada de Kubernetes proporciona enrutamiento HTTP o HTTPS desde fuera del clúster a uno o varios servicios dentro del clúster. Los clústeres de TKG admiten la entrada a través de controladoras de terceros, como Nginx.
En este tutorial, se demuestra cómo implementar un servicio de entrada de Kubernetes basado en Nginx para enrutar el tráfico externo a los servicios en un clúster de Tanzu Kubernetes. Un servicio de entrada requiere una controladora de entrada. Instalamos la controladora de entrada de Nginx con Helm. Helm es un administrador de paquetes para Kubernetes.
Nota: Existen varias formas de llevar a cabo esta tarea. Los pasos que se indican a continuación corresponden a un enfoque. Otros enfoques pueden ser más adecuados para su entorno en particular.
Requisitos previos
- Revise el recurso de Entrada en la documentación de Kubernetes.
- Revise la documentación de la controladora de entrada de Nginx.
- Aprovisione un clúster de TKG.
- Habilite la directiva de seguridad de pods, si es necesario.
- Conéctese al clúster de TKG.
Procedimiento
- Para instalar Helm, consulte la documentación.
- Instale la controladora de entrada de Nginx con Helm.
helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
helm install ingress-nginx ingress-nginx/ingress-nginx
- Compruebe que la controladora de entrada de Nginx esté implementada como un servicio de tipo equilibrador de carga (LoadBalancer).
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
ingress-nginx-controller LoadBalancer 10.16.18.20 10.19.14.76 80:30635/TCP,443:30873/TCP 59m
ingress-nginx-controller-admission ClusterIP 10.87.41.25 <none> 443/TCP 59m
- Ejecute ping en el equilibrador de carga utilizando la dirección IP externa.
Pinging 10.19.14.76 with 32 bytes of data:
Reply from 10.19.14.76: bytes=32 time<1ms TTL=62
Reply from 10.19.14.76: bytes=32 time=1ms TTL=62
- Compruebe que la controladora de entrada de Nginx esté en ejecución.
NAME READY STATUS RESTARTS AGE
ingress-nginx-controller-7c6c46898c-v6blt 1/1 Running 0 76m
- Cree un recurso de entrada con una regla de entrada y una ruta de acceso denominada
ingress-hello.yaml
.
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: ingress-hello
spec:
rules:
- http:
paths:
- path: /hello
backend:
serviceName: hello
servicePort: 80
- Implemente el recurso
ingress-hello
.
kubectl apply -f ingress-hello.yaml
ingress.networking.k8s.io/ingress-hello created
- Compruebe que el recurso de entrada se haya implementado.
Tenga en cuenta que la dirección IP se asigna a la IP externa de la controladora de entrada.
kubectl get ingress
NAME CLASS HOSTS ADDRESS PORTS AGE
ingress-hello <none> * 10.19.14.76 80 51m
- Cree una aplicación y un servicio de prueba Hello denominados ingress-hello-test.yaml.
kind: Service
apiVersion: v1
metadata:
name: hello
spec:
selector:
app: hello
tier: backend
ports:
- protocol: TCP
port: 80
targetPort: http
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: hello
spec:
replicas: 3
selector:
matchLabels:
app: hello
tier: backend
track: stable
template:
metadata:
labels:
app: hello
tier: backend
track: stable
spec:
containers:
- name: hello
image: "gcr.io/google-samples/hello-go-gke:1.0"
ports:
- name: http
containerPort: 80
- Implemente el recurso
ingress-hello-test
.
kubectl apply -f ingress-hello-test.yaml
service/hello created
deployment.apps/hello created
- Compruebe que la implementación de
hello
esté disponible.
NAME READY UP-TO-DATE AVAILABLE AGE
hello 3/3 3 3 4m59s
ingress-nginx-controller 1/1 1 1 3h39m
- Obtenga la dirección IP pública del equilibrador de carga que utiliza la controladora de entrada de Nginx.
NAME CLASS HOSTS ADDRESS PORTS AGE
ingress-hello <none> * 10.19.14.76 80 13m
- Con un navegador, desplácese hasta la dirección IP pública y escriba la ruta de entrada.
Se devolverá el mensaje "Hello".
{"message":"Hello"}
Resultados
El navegador permite acceder externamente a la aplicación de back-end que ofrece el servicio en ejecución dentro del clúster a través de la controladora de entrada con la dirección IP externa del equilibrador de carga.