- 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-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
- 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
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.
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
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.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
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
.
- 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 | [email protected] |
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-