Si vous utilisez minikube, vous devez activer le contrôleur NGNIX Ingress.
minikube addons enable ingress
Attendez une minute ou deux et vérifiez qu’il a été déployé correctement :
kubectl get pods -n ingress-nginx
ingress-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 6m28s
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
EOF
Exposez le service :
kubectl expose deployment quarkus-demo-deployment --type=NodePort --port=8080
kubectl get service quarkus-demo-deployment
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
quarkus-demo-deployment NodePort 10.105.106.66 <none> 8080:30408/TCP 11s
IP=$(minikube ip)
PORT=$(kubectl get service/quarkus-demo-deployment -o jsonpath="{.spec.ports[*].nodePort}")
Réaliser une requete sur le service :
curl $IP:$PORT
Une ressource d’entrée est définie comme suit :
vim apps/kubefiles/demo-ingress.yaml
apiVersion: 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: 8080
kubectl apply -f apps/kubefiles/demo-ingress.yaml
Obtenir les informations de la ressource Ingress :
kubectl get ingress
NAME CLASS HOSTS ADDRESS PORTS AGE
example-ingress <none> kube-team.info 192.168.99.115 80 68s
Vous 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 ip
10.240.145.124
sudo vim /etc/hosts
10.240.145.124 kube-team.info
curl kube-devnation.info
Si vous avez un proxy :
curl --noproxy kube-devnation.info kube-devnation.info
Supersonic Subatomic Java with Quarkus quarkus-demo-deployment-8cf45f5c8-qmzwl:1
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
EOF
kubectl expose deployment mynode-deployment --type=NodePort --port=8000
Ensuite, vous devez mettre à jour la ressource Ingress avec le nouveau chemin :
vim apps/kubefiles/demo-ingress-2.yaml
apiVersion: 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: 8000
kubectl apply -f apps/kubefiles/demo-ingress-2.yaml
Tester :
curl kube-team.info
Supersonic Subatomic Java with Quarkus quarkus-demo-deployment-8cf45f5c8-qmzwl:2
curl kube-team.info/v2
Node Bonjour on mynode-deployment-77c7bf857d-5nfl4 0
Supprimer 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