- Wordpress Version: 4.9.4 (https://github.com/fjudith/docker-wordpress)
- Istio Version: 0.6.0 (https://github.com/istio/istio)
- Kubernetes Version: 1.9.3 (https://github.com/fjudith/coreos-kubernetes)
- Operating System Version: CoreOS Stable (vagrant/vmware workstation & vagrant /virtualbox)
- Network CNI: flannel
- Storage: local
- Kubernetes config (etcd/controller/worker): 1/1/2
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.
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
- 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- Contrôller l'installation dans kubernetes
kubectl get svc -n istio-systemNAME 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- Valider l'état d'exécution des Pods Istio
kubectl get pods -n istio-systemNAME 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 12hDes 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 describepour inspecter l'état d'injection des proxy.
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 admissionregistrationLe résultat de la commande devrait être le suivant.
admissionregistration.k8s.io/v1beta1
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 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.yamlLes 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-certsInstaller le configmap du sidecar injection.
kubectl apply -f install/kubernetes/istio-sidecar-injector-configmap-release.yamlInitialiser 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.yamlInstaller le sidecar injectof webhook.
kubectl apply -f install/kubernetes/istio-sidecar-injector-with-ca-bundle.yamlValider l'état d'exécution du sidecar injector webhook
kubectl -n istio-system get deployment -listio=sidecar-injectorNAME 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
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 istionamespace "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.
- 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
- 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.
- Remarque: Le second test redirige le navigateur vers le noeud Kubernetes hébergeant le pod
- 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é |
- 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.
./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-