Um recurso de entrada do Kubernetes fornece roteamento HTTP ou HTTPS de fora do cluster para um ou mais serviços dentro do cluster. Os clusters TKG oferecem suporte à entrada por meio de controladores de terceiros, como o Nginx.
Este tutorial demonstra como implantar um serviço de entrada do Kubernetes com base no NGINX para rotear o tráfego externo para serviços no cluster Tanzu Kubernetes. Um serviço de ingresso requer um controlador de ingresso. Instalamos o controlador NGINX Ingress usando o Helm. O Helm é um gerenciador de pacotes para Kubernetes.
Observação: Há várias maneiras de realizar essa tarefa. As etapas aqui fornecem uma abordagem. Outras abordagens podem ser mais adequadas para você em seu determinado ambiente.
Pré-requisitos
- Revise o recurso Ingress na documentação do Kubernetes.
- Revise a documentação do controlador de Entrada do Nginx.
- Provisione um cluster TKG.
- Ative a política de segurança do pod, se necessário.
- Conecte-se ao cluster TKG.
Procedimento
- Instale o Helm consultando a documentação.
- Instale o controlador NGINX Ingress usando o Helm.
helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
helm install ingress-nginx ingress-nginx/ingress-nginx
- Verifique se o controlador de entrada do Nginx está implantado como um serviço do tipo 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
- Faça ping no balanceador de carga usando o endereço IP externo.
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
- Verifique se o controlador Nginx Ingress está em execução.
NAME READY STATUS RESTARTS AGE
ingress-nginx-controller-7c6c46898c-v6blt 1/1 Running 0 76m
- Crie um recurso de entrada com uma regra de entrada e um caminho chamado
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 o recurso
ingress-hello
.
kubectl apply -f ingress-hello.yaml
ingress.networking.k8s.io/ingress-hello created
- Verifique se o recurso de entrada está implantado.
Observe que o endereço IP é mapeado para o IP externo do controlador de ingresso.
kubectl get ingress
NAME CLASS HOSTS ADDRESS PORTS AGE
ingress-hello <none> * 10.19.14.76 80 51m
- Crie um aplicativo de teste hello e um serviço chamado 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 o recurso
ingress-hello-test
.
kubectl apply -f ingress-hello-test.yaml
service/hello created
deployment.apps/hello created
- Verifique se a implantação
hello
está disponível.
NAME READY UP-TO-DATE AVAILABLE AGE
hello 3/3 3 3 4m59s
ingress-nginx-controller 1/1 1 1 3h39m
- Obtenha o endereço IP público do balanceador de carga usado pelo controlador de entrada Nginx.
NAME CLASS HOSTS ADDRESS PORTS AGE
ingress-hello <none> * 10.19.14.76 80 13m
- Usando um navegador, navegue até o IP público e inclua o caminho de entrada.
A mensagem "hello" é retornada.
{"message":"Hello"}
Resultados
O aplicativo de back-end que é liderado pelo serviço em execução dentro do cluster é acessado externamente pelo navegador por meio do controlador de entrada usando o endereço IP externo do balanceador de carga.