Una risorsa di ingresso Kubernetes fornisce il routing HTTP o HTTPS dall'esterno del cluster a uno o più servizi all'interno del cluster. I cluster TKG supportano l'ingresso tramite controller di terze parti, ad esempio Nginx.
In questo tutorial viene illustrato come distribuire un servizio di ingresso Kubernetes basato su NGINX per il routing del traffico esterno ai servizi nel cluster di Tanzu Kubernetes. Un servizio in ingresso richiede un controller in ingresso. NGINX Ingress Controller viene installato utilizzando Helm. Helm è un gestore di pacchetti per Kubernetes.
Nota: Esistono diversi modi per eseguire questa attività. I passaggi descritti di seguito offrono un approccio. In base all'ambiente specifico, l'utente potrebbe ritenere altri approcci più adatti.
Prerequisiti
- Esaminare la risorsa Ingresso nella documentazione di Kubernetes.
- Consultare la documentazione di Nginx Ingress Controller.
- Effettuare il provisioning di un cluster TKG.
- Abilitare il criterio di sicurezza del pod, se necessario.
- Connettersi al cluster TKG.
Procedura
- Installare Helm facendo riferimento alla documentazione.
- Installare NGINX Ingress Controller utilizzando Helm.
helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
helm install ingress-nginx ingress-nginx/ingress-nginx
- Verificare che Nginx Ingresso Controller sia distribuito come servizio di 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
- Eseguire un ping al bilanciamento del carico utilizzando l'indirizzo IP esterno.
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
- Verificare che Nginx Ingress Controller sia in esecuzione.
NAME READY STATUS RESTARTS AGE
ingress-nginx-controller-7c6c46898c-v6blt 1/1 Running 0 76m
- Creare una risorsa di ingresso con una regola di ingresso e un percorso denominati
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
- Distribuire la risorsa
ingress-hello
.
kubectl apply -f ingress-hello.yaml
ingress.networking.k8s.io/ingress-hello created
- Verificare che la risorsa in ingresso sia distribuita.
Si noti che l'indirizzo IP viene mappato all'IP esterno del controller in ingresso.
kubectl get ingress
NAME CLASS HOSTS ADDRESS PORTS AGE
ingress-hello <none> * 10.19.14.76 80 51m
- Creare un'app e un servizio di test Hello denominato 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
- Distribuire la risorsa
ingress-hello-test
.
kubectl apply -f ingress-hello-test.yaml
service/hello created
deployment.apps/hello created
- Verificare che la distribuzione di
hello
sia disponibile.
NAME READY UP-TO-DATE AVAILABLE AGE
hello 3/3 3 3 4m59s
ingress-nginx-controller 1/1 1 1 3h39m
- Recuperare l'indirizzo IP pubblico del bilanciamento del carico utilizzato da Nginx Ingress Controller.
NAME CLASS HOSTS ADDRESS PORTS AGE
ingress-hello <none> * 10.19.14.76 80 13m
- Utilizzando un browser, passare all'IP pubblico e includere il percorso di ingresso.
Viene restituito il messaggio "hello".
{"message":"Hello"}
risultati
Il browser accede esternamente all'app di back-end, avente come fron-end il servizio in esecuzione all'interno del cluster, tramite il controller di ingresso utilizzando l'indirizzo IP esterno del bilanciamento del carico.