Skip to content

Instantly share code, notes, and snippets.

@fjudith
Last active April 6, 2021 03:04
Show Gist options
  • Save fjudith/6854774b7f5c2a78b721fc35f050355c to your computer and use it in GitHub Desktop.
Save fjudith/6854774b7f5c2a78b721fc35f050355c to your computer and use it in GitHub Desktop.
Kubernetes + Istio + Wordpress

Guide de mise en oeuvre de Wordpress avec Istio

Environnement

Pré-requis

Les instructions suivantes requiert un accès à un cluster Kubernetes 1.7.3 ou supérieure avec la fonction RBAC (Role Based Access Control) d'activée. Kubernetes 1.9 est la version minimale pour activer la fonction automatic sidecar injection.

Installation

https://istio.io/docs/setup/kubernetes/sidecar-injection.html

A compter de la version 0.2, Istio est installé dans son propre espace de nom istio-system, et peut être géré depuis sous les autres espaces de nom

  1. Lancer git-bash, puis télécharger et installer Istio.
ISTIO_VERSION=0.7.1

pushd ~/
curl -L -O https://github.com/istio/istio/releases/download/${ISTIO_VERSION}/istio_${ISTIO_VERSION}_win.zip
unzip istio_${ISTIO_VERSION}_win.zip -d ~/.istio

cd ~/.istio
export PATH=$PWD/bin:$PATH
kubectl apply -f install/kubernetes/istio.yaml
popd
  1. Contrôller l'installation dans kubernetes
kubectl get svc -n istio-system
NAME            TYPE           CLUSTER-IP   EXTERNAL-IP   PORT(S)                                                            AGE
istio-ingress   LoadBalancer   10.3.0.186   <pending>     80:30707/TCP,443:31195/TCP                                         12h
istio-mixer     ClusterIP      10.3.0.214   <none>        9091/TCP,15004/TCP,9093/TCP,9094/TCP,9102/TCP,9125/UDP,42422/TCP   12h
istio-pilot     ClusterIP      10.3.0.108   <none>        15003/TCP,8080/TCP,9093/TCP,443/TCP                                12h

Installer le Service Mesh Istio

  1. Valider l'état d'exécution des Pods Istio
kubectl get pods -n istio-system
NAME                             READY     STATUS    RESTARTS   AGE
istio-ca-59f6dcb7d9-9mvqp        1/1       Running   0          12h
istio-ingress-779649ff5b-tkbh7   1/1       Running   0          12h
istio-mixer-7f4fd7dff-cdfzc      3/3       Running   0          12h
istio-pilot-5f5f76ddc8-2pkcf     2/2       Running   0          12h

Automatic sidecar injection

Des sidecars peuvent être automatiquement ajoutées aux pods Kubernetes éligibles en utilisant le mutating webhook adminission controller, disponible dans Kubernetes 1.9 et supérieurs. Plus spécifiquement, il faut vérifier que le processus kube-apiserver possède l'option admission-control de configurée avec les contrôlleurs d'adminission MutatingAdminissionWebhook et ValidatingAdmissionWebhook dans le bon ordre successif d'apparition.

Contrairement à l'injection manuelle, l'injection automatique est pris en charge au niveau des pods. Aucun changement n'est percéptible au niveau des déploiements. il faut alors utiliser la commande kubectl describe pour inspecter l'état d'injection des proxy.

Pré-requis

Un cluster Kubernetes en version 1.9 avec l'API admissionregistration.k8s.io/v1beta1 d'activé est la configuration minimale requise. Cette option est normalement activée par défaut sur la plupart des installations. Exécuter la commande suivante pour vérifier.

kubectl api-versions | grep admissionregistration

Le résultat de la commande devrait être le suivant.

admissionregistration.k8s.io/v1beta1

Coreos-Kubernetes

Valider la valeur du contrôle d'adminission du kube-api-server.

vagrant ssh c1 -c "cat /etc/kubernetes/manifests/kube-apiserver.yaml | grep 'admission-control'"
    - --admission-control=NamespaceLifecycle,LimitRanger,ServiceAccount,PersistentVolumeLabel,DefaultStorageClass,DefaultTolerationSeconds,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota

Valider la configuration du module de signature de certificat du kube-controller-manager.

vagrant ssh c1 -c "cat /etc/kubernetes/manifests/kube-controller-manager.yaml | grep 'cluster-signing'"
    - --cluster-signing-cert-file=/etc/kubernetes/ssl/ca.pem
    - --cluster-signing-key-file=/etc/kubernetes/ssl/ca-key.pem

Installer le Webhook

Installer les composants de base d'Istio. Cette version n'active pas les l'authentification mutuelle des sidecars des sidecar afin d'autoriser l'interaction avec les pods hors de périmètre de gestion d'Istio, ainsi que ceux utilisant les sondes liveness_prob et readiness_prob.

kubectl apply -f install/kubernetes/istio.yaml

Les Webhooks demandes un jeu de clé/certificat. Utiliser install/kubernetes/webhook-create-signed-cert.sh pour en générer un signé par l'autorité ce certification (CA) Kubernetes. Le jeu de clé/certificat est alors stocké en tant que Kubernet Secret afin qu'il puisse être consommé par le sidecar injectof webhook

./install/kubernetes/webhook-create-signed-cert.sh \
--service istio-sidecar-injector \
--namespace istio-system \
--secret sidecar-injector-certs

Installer le configmap du sidecar injection.

kubectl apply -f install/kubernetes/istio-sidecar-injector-configmap-release.yaml

Initialiser le caBundle dans le fichier de configuration YAML du webhook afin que l'api-server Kubernetes puisse l'invoquer.

cat install/kubernetes/istio-sidecar-injector.yaml | \
./install/kubernetes/webhook-patch-ca-bundle.sh > \
install/kubernetes/istio-sidecar-injector-with-ca-bundle.yaml

Installer le sidecar injectof webhook.

kubectl apply -f install/kubernetes/istio-sidecar-injector-with-ca-bundle.yaml

Valider l'état d'exécution du sidecar injector webhook

kubectl -n istio-system get deployment -listio=sidecar-injector
NAME                     DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
istio-sidecar-injector   1         1         1            1           52s

Le NamespaceSelector décide s'il faut exécuter le webhook sur projet en évaluant si l'espace de nom de cet objet contient le label istio-injection=enabled.

kubectl get namespace -L istio-injection
$ kubectl get namespace -L istio-injection
NAME           STATUS    AGE       ISTIO-INJECTION
default        Active    1h
istio-system   Active    22m
kube-public    Active    1h
kube-system    Active    1h

Déployer une application

Lancer une session instance de ligne de commande, puis exécuter les commandes suivantes pour instantier une application WordPress multi-tiers.

pushd ~/git
git clone https://github.com/fjudith/docker-wordpress
cd docker-wordpress/kubernetes

./k8swordpress.sh --create istio
namespace "wordpress" created
namespace "wordpress" labeled
persistentvolume "local-pv-1" created
persistentvolume "local-pv-2" created
secret "wp-mysql-pass" created
service "wordpress-mysql" created
persistentvolumeclaim "mysql-pv-claim" created
deployment "wordpress-mysql" created
service "wordpress" created
persistentvolumeclaim "wp-pv-claim" created
deployment "wordpress" created
service "memcached" created
deployment "memcached" created
service "nginx" created
deployment "nginx" created
ingress "gateway" created
Istio Gateway: 172.17.4.202:30813

La dernière ligne contient l'adresse d'accès locale à la passerelle Istio utilisée pour accéder à l'instance Wordpress.

Remarque: Les règles de redirection du flux HTTP vers le serveur NGINX sont prises en carge par l'Ingress Controller gateway.

Valider de déploiement

  1. Lancer une session web vers http://172.17.4.202:30813. Le navigateur devrait ensuite être redirigé vers http://172.17.4.202:30813/wp-admin/install.php
  2. Lancer une session web vers http://172.17.4.201:30813. Le navigateur devrait ensuite être redirigé vers http://172.17.4.202:30813/wp-admin/install.php
    • Remarque: Le second test redirige le navigateur vers le noeud Kubernetes hébergeant le pod istio-ingress.
  3. Initialiser le site Web
Clé Valeur
Site Title Istio & Wordpress
Username admin
Password admin
Confirm use of weak password Activé
Your email admin@example.com
Search Engine Visibility Activé
  1. Lancer une nouvelle session Web vers http://172.17.4.202:30813, puis valider que la page d'acceuil du site Web s'affiche correctement.

Suppression intégrale

./k8swordpress.sh --delete istio

kubectl delete -f install/kubernetes/istio-sidecar-injector-with-ca-bundle.yaml

kubectl -n istio-system delete secret sidecar-injector-certs
kubectl delete csr istio-sidecar-injector.istio-system
kubectl label namespace default istio-injection-
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment