curl -k -L https://istio.io/downloadIstio | sh -
export PATH="$PATH:/root/istio-1.8.1/bin"

使用默认配置档安装 Istio
#istioctl install
istioctl install --set profile=demo -y

kubectl get svc,pod -n istio-system

给命名空间添加标签,指示 Istio 在部署应用的时候,自动的注入 Envoy 边车代理:
kubectl label namespace default istio-injection=enabled

部署 Bookinfo 示例应用:
kubectl apply -f samples/bookinfo/platform/kube/bookinfo.yaml

查看service
kubectl get services
NAME          TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)    AGE
details       ClusterIP   10.0.0.212              9080/TCP   29s
kubernetes    ClusterIP   10.0.0.1                443/TCP    25m
productpage   ClusterIP   10.0.0.57               9080/TCP   28s
ratings       ClusterIP   10.0.0.33               9080/TCP   29s
reviews       ClusterIP   10.0.0.28               9080/TCP   29s

查看POD
kubectl get pod|grep -v webserver
NAME                              READY   STATUS    RESTARTS   AGE
details-v1-558b8b4b76-2llld       2/2     Running   0          2m41s
productpage-v1-6987489c74-lpkgl   2/2     Running   0          2m40s
ratings-v1-7dc98c7588-vzftc       2/2     Running   0          2m41s
reviews-v1-7f99cc4496-gdxfn       2/2     Running   0          2m41s
reviews-v2-7d79d5bd5d-8zzqd       2/2     Running   0          2m41s
reviews-v3-7dbcdcbc56-m8dph       2/2     Running   0          2m41s

验证方方面面均工作无误
kubectl exec "$(kubectl get pod -l app=ratings -o jsonpath='{.items[0].metadata.name}')" -c ratings -- curl -s productpage:9080/productpage | grep -o ""


对外开放应用程序
把应用关联到 Istio 网关:
kubectl apply -f samples/bookinfo/networking/bookinfo-gateway.yaml
确保配置文件没有问题:
istioctl analyze
No validation issues found when analyzing namespace: default.

确定入站 IP 和端口
kubectl get svc istio-ingressgateway -n istio-system
NAME                   TYPE           CLUSTER-IP      EXTERNAL-IP   PORT(S)                                                                      AGE
istio-ingressgateway   LoadBalancer   10.43.220.189        15021:32736/TCP,80:31738/TCP,443:30737/TCP,31400:30193/TCP,15443:32134/TCP   38m

export INGRESS_PORT=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.spec.ports[?(@.name=="http2")].nodePort}')
export SECURE_INGRESS_PORT=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.spec.ports[?(@.name=="https")].nodePort}')
export INGRESS_HOST=$(kubectl get po -l istio=ingressgateway -n istio-system -o jsonpath='{.items[0].status.hostIP}')
export GATEWAY_URL=$INGRESS_HOST:$INGRESS_PORT
echo "$GATEWAY_URL"

获取外部访问地址
echo "http://$GATEWAY_URL/productpage"
http://10.1.102.201:31738/productpage

仪表板
kubectl apply -f samples/addons  #需要执行两次,第一次一般会有报错
kubectl rollout status deployment/kiali -n istio-system
Waiting for deployment "kiali" rollout to finish: 0 of 1 updated replicas are available...
deployment "kiali" successfully rolled out

kubectl get pod -n istio-system

访问 Kiali 仪表板
#istioctl dashboard kiali
istioctl dashboard kiali --address "0.0.0.0"
http://localhost:20001/kiali
Failed to open browser; open http://localhost:20001/kiali in your browser.
打开
http://10.1.102.200:20001/kiali/

01-12 03:08