Ingress
Prérequis
Cette section ne fonctionne pas sur MacOs. Vous devez absolument être sur une machine Linux.
Activer le contrôleur d’entrée
Si vous utilisez minikube, vous devez activer le contrôleur NGNIX Ingress.
minikube addons enable ingressAttendez une minute ou deux et vérifiez qu’il a été déployé correctement :
kubectl get pods -n ingress-nginxingress-nginx-admission-create-lqfh2 0/1 Completed 0 6m28s
ingress-nginx-admission-patch-z2lzj 0/1 Completed 2 6m28s
ingress-nginx-controller-69ccf5d9d8-95xgp 1/1 Running 0 6m28sDéployer l’application
cat <<EOF | kubectl apply -f -
apiVersion: apps/v1
kind: Deployment
metadata:
name: quarkus-demo-deployment
spec:
replicas: 1
selector:
matchLabels:
app: quarkus-demo
template:
metadata:
labels:
app: quarkus-demo
env: dev
spec:
containers:
- name: quarkus-demo
image: quay.io/rhdevelopers/quarkus-demo:v1
imagePullPolicy: Always
ports:
- containerPort: 8080
EOFExposez le service :
kubectl expose deployment quarkus-demo-deployment --type=LoadBalancer --port=8080
kubectl get service quarkus-demo-deploymentNAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
quarkus-demo-deployment NodePort 10.105.106.66 <none> 8080:30408/TCP 11sIP=$(kubectl get service myapp -o jsonpath="{.status.loadBalancer.ingress[0].ip}")
PORT=$(kubectl get service myapp -o jsonpath="{.spec.ports[*].port}")Réaliser une requete sur le service :
curl $IP:$PORTConfiguration l’Ingress
Une ressource d’entrée est définie comme suit :
vim apps/kubefiles/demo-ingress.yamlapiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: example-ingress
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /$1
spec:
rules:
- host: kube-team.info
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: quarkus-demo-deployment
port:
number: 8080kubectl apply -f apps/kubefiles/demo-ingress.yamlObtenir les informations de la ressource Ingress :
kubectl get ingressNAME CLASS HOSTS ADDRESS PORTS AGE
example-ingress <none> kube-team.info 192.168.99.115 80 68sVous devez attendre que le champ d’adresse soit défini. Cela peut prendre quelques minutes.
Modifiez le fichier /etc/hosts pour faire pointer le nom d’hôte vers l’adresse Ingress.
minikube ip10.240.145.124sudo vim /etc/hosts10.240.145.124 kube-team.infocurl kube-team.infoSi vous avez un proxy :
curl --noproxy kube-team.info kube-team.infoSupersonic Subatomic Java with Quarkus quarkus-demo-deployment-8cf45f5c8-qmzwl:1Deuxième déploiement
Déployer une deuxième version du service :
cat <<EOF | kubectl apply -f -
apiVersion: apps/v1
kind: Deployment
metadata:
name: mynode-deployment
spec:
replicas: 1
selector:
matchLabels:
app: mynode
template:
metadata:
labels:
app: mynode
spec:
containers:
- name: mynode
image: quay.io/rhdevelopers/mynode:v1
ports:
- containerPort: 8000
EOFkubectl expose deployment mynode-deployment --type=NodePort --port=8000Mise à jour de l’Ingress
Ensuite, vous devez mettre à jour la ressource Ingress avec le nouveau chemin :
vim apps/kubefiles/demo-ingress-2.yamlapiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: example-ingress
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /$1
spec:
rules:
- host: kube-team.info
http:
paths:
- path: /
backend:
serviceName: quarkus-demo-deployment
servicePort: 8080
- path: /v2
backend:
serviceName: mynode-deployment
servicePort: 8000kubectl apply -f apps/kubefiles/demo-ingress-2.yamlTester :
curl kube-team.infoSupersonic Subatomic Java with Quarkus quarkus-demo-deployment-8cf45f5c8-qmzwl:2curl kube-team.info/v2Node Bonjour on mynode-deployment-77c7bf857d-5nfl4 0Supprimer les ressources
kubectl delete deployment mynode-deployment
kubectl delete service mynode-deployment
kubectl delete deployment quarkus-demo-deployment
kubectl delete service quarkus-demo-deployment
kubectl delete -f apps/kubefiles/demo-ingress-2.yaml