Lab 02 : Déployer et exposer une application dans OKS
Introduire les annontations
Dans cet atelier, vous allez apprendre à déployer une application simple sur Kubernetes.
Architecture du TP
Section intitulée « Architecture du TP »Dans cette partie, vous allez apprendre à :
- Déployer une application simple sur le cluster Kubernetes.
- Déployer une Application Nginx et l’Exposer
Vérifier l’accès au cluster
Section intitulée « Vérifier l’accès au cluster »Assurez-vous d’avoir les permissions nécessaires pour accéder au cluster cible. Vous devez disposer d’un utilisateur ou d’un rôle qui vous permet d’exporter ou de récupérer la configuration du cluster.
Récupérer le fichier kubeconfig
Section intitulée « Récupérer le fichier kubeconfig »oks-cli cluster kubeconfig --cluster-name my-cluster --project-name my-project > kubeconfig.yamlexport KUBECONFIG=./kubeconfig.yamlTester le cluster
Section intitulée « Tester le cluster »kubectl get nodesInstaller et Configurer NGINX Ingress dans Kubernetes
Section intitulée « Installer et Configurer NGINX Ingress dans Kubernetes »- Installer le contrôleur NGINX Ingress
Option 1 : Installation via Helm
Section intitulée « Option 1 : Installation via Helm »- Ajouter le dépôt de chartes NGINX Ingress :
helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginxhelm repo update- Installer le contrôleur Ingress NGINX dans le namespace
ingress-nginx:
helm install nginx-ingress ingress-nginx/ingress-nginx --set controller.admissionWebhooks.enabled=true --create-namespace --namespace ingress-nginx- Vérifier le déploiement du contrôleur Ingress
- Vérifier que les pods du contrôleur Ingress sont en cours d’exécution :
Example de sortie:
kubectl get pods -n ingress-nginxNAME READY STATUS RESTARTS AGEingress-nginx-controller-7bbfb99f87-s5cr6 1/1 Running 0 3m- Assurez-vous que les pods sont dans un état
Running. - Vérifier le Service de LoadBalancer
- Vérifiez l’adresse IP externe du LoadBalancer pour Ingress :
Exemple de sortie :
kubectl get svc -n ingress-nginxNAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGEingress-nginx-controller LoadBalancer 10.96.0.1 203.0.113.10 80:30080/TCP,443:30443/TCP 5mingress-nginx-controller-admission ClusterIP 10.92.97.75 <none> 443/TCP 5m- Maintenant, nous pouvons déployer une application simple et l’exposer via NGINX Ingress :
---apiVersion: v1kind: Servicemetadata: labels: app: echoheaders name: service-test namespace: ingress-nginxspec: ports: - port: 8080 protocol: TCP targetPort: 8080 selector: app: echoheaders type: ClusterIP---apiVersion: apps/v1kind: Deploymentmetadata: labels: app: echoheaders name: echoheaders namespace: ingress-nginxspec: replicas: 1 selector: matchLabels: app: echoheaders template: metadata: labels: app: echoheaders spec: containers: - image: gcr.io/google_containers/echoserver:1.10 imagePullPolicy: IfNotPresent name: echoheaders ports: - containerPort: 8080 protocol: TCP---apiVersion: networking.k8s.io/v1kind: Ingressmetadata: name: test-ingress namespace: ingress-nginx annotations: nginx.ingress.kubernetes.io/ssl-redirect: "false" stz-test: "2"spec: ingressClassName: nginx rules: - http: paths: - pathType: Prefix path: "/" backend: service: name: service-test port: number: 8080 host: 'service-test.eu-west-2.lbu.outscale.com'kubectl apply -f ingress.yaml- Vérifier que l’Ingress est déployé et fonctionnel
Exemple de sortie :
kubectl get ingress -n ingress-nginxNAME CLASS HOSTS ADDRESS PORTS AGEtest-ingress internal-nginx service-test.eu-west-2.lbu.outscale.com 80.247.7.60 80 13m- Tester l’accès via
curl:
curl -H "Host: service-test.eu-west-2.lbu.outscale.com" 80.247.7.60Si tout est ok, vous devriez voir une sortie de ce type dans votre terminal:
Hostname: echoheaders-65475f6b6-llqkw
Pod Information: -no pod information available-
Server values: server_version=nginx: 1.13.3 - lua: 10008
Request Information: client_address=X.X.X.X method=GET real path=/ query= request_version=1.1 request_scheme=http request_uri=http://service-test.eu-west-2.lbu.outscale.com:8080/
Request Headers: accept=*/* host=service-test.eu-west-2.lbu.outscale.com user-agent=curl/8.7.1 x-forwarded-for=X.X.X.X x-forwarded-host=service-test.eu-west-2.lbu.outscale.com x-forwarded-port=443 x-forwarded-proto=http x-forwarded-scheme=http x-real-ip=X.X.X.X x-request-id=897a8e2212b4db9c33e8c4e25bf50b85 x-scheme=http
Request Body: -no body in request-Maintenant, utilisons SSL. Tout d’abord, installons le cert-manager :
helm repo add jetstack https://charts.jetstack.io --force-update
helm install \ cert-manager jetstack/cert-manager \ --namespace cert-manager \ --create-namespace \ --version v1.19.1 \ --set crds.enabled=trueEt appliquez les manifestes nécessaires :
apiVersion: cert-manager.io/v1kind: ClusterIssuermetadata: name: letsencrypt-prodspec: selfSigned: {}---apiVersion: cert-manager.io/v1kind: Issuermetadata: name: letsencrypt-ca namespace: ingress-nginxspec: ca: secretName: letsencrypt-ca---apiVersion: cert-manager.io/v1kind: Certificatemetadata: name: letsencrypt-ca namespace: ingress-nginxspec: isCA: true commonName: osm-system secretName: letsencrypt-ca issuerRef: name: letsencrypt-prod kind: ClusterIssuer group: cert-manager.ioMaintenant, nous avons un certificat (auto-signé), fourni par CertManager.
Dans un premier temps, supprimer l’ingress créé préalablement
kubectl delete -f ingress.yamlRemplacez l’ingress par celui contenant la définition TLS dans nouveau fichier ingress-tls.yaml:
---apiVersion: networking.k8s.io/v1kind: Ingressmetadata: name: test-ingress namespace: ingress-nginx annotations: nginx.ingress.kubernetes.io/ssl-redirect: "false" cert-manager.io/cluster-issuer: "letsencrypt-prod"spec: tls: - hosts: - '*.eu-west-2.lbu.outscale.com' secretName: letsencrypt-ca ingressClassName: nginx rules: - http: paths: - pathType: Prefix path: "/" backend: service: name: service-test port: number: 8080 host: 'service-test.eu-west-2.lbu.outscale.com'Appliquez-le !
kubectl apply -f ingress-tls.yamlTestons le port 80:
curl -H "Host: service-test.eu-west-2.lbu.outscale.com" 80.247.7.60Testons le port 443 (HTTPS):
curl -H "Host: service-test.eu-west-2.lbu.outscale.com" https://80.247.7.60 -kConclusion
Section intitulée « Conclusion »Une fois ces étapes complétées, vous aurez installé le contrôleur Ingress NGINX
et configuré l’accès à votre application via un nom d’hôte personnalisé
(my-nginx.example.com).