前言
Istio 架構又換了,1.5 開始,該版本最大的變化是將控制平面的所有組件組合成一個單體結構叫 istiod,把控制平面的所有組件組合並成一個單體結構叫 istiod,對於運維部署來說省去很大麻煩。Mixer 組件被移除,新版本的 HTTP 遙測默認基於 in-proxy Stats filter,同時可使用 WebAssembly 開發 in-proxy 。

准備部署istio
1、kubernetes環境准備
kubernetes可以參考https://www.cnblogs.com/MinZhou/p/12579634.html
2、在GitHub下載istio安裝文件
curl -L https://istio.io/downloadIstio | sh -
3、進入istio安裝包
cd istio-1.5.0 tree -L 1 ./ ./ ├── all-in-one.tar ├── grafana.tar ├── ingress.yaml ├── istio-1.5.0 ├── istio-1.5.0-linux.tar.gz ├── kiali.tar ├── pilot.tar ├── prometheus.tar └── proxyv2.tar 1 directory, 8 files
4、將istioctl拷貝到/usr/local/bin/中
cp bin/sitioctl /usr/local/bin/
5、將 istioctl 命令添加到環境變量中
vim ~/.bashrc PATH="$PATH:/usr/local/src/istio-1.5.1/bin" source ~/.bashrc
6、配置 istioctl 參數自動補全
vim ~/.bashrc source /usr/local/src/istio-1.5.1/tools/istioctl.bash source ~/.bashrc
7、istio部署
istio提供了多種的部署方法可以提供如下命令查看
ll ./istio-1.5.0/install/kubernetes/operator/profiles/ -rw-r--r-- 1 root root 18091 Mar 4 07:40 default.yaml -rw-r--r-- 1 root root 3194 Mar 4 07:40 demo.yaml -rw-r--r-- 1 root root 964 Mar 4 07:40 empty.yaml -rw-r--r-- 1 root root 913 Mar 4 07:40 minimal.yaml -rw-r--r-- 1 root root 579 Mar 4 07:40 remote.yaml -rw-r--r-- 1 root root 554 Mar 4 07:40 separate.yaml
他們之間的區別如下表:

注意:
(1)default 基礎上開啟 Grafana、istio-tracing、kiali 附加組件
(2)cni 配置關閉,但相關參數已配置
(3)全局禁用 TLS
(4)Grafana、istio-tracing、kiali、prometheus 通過 istio-ingressgateway 暴露
(5)排除 192.168.16.0/20,192.168.32.0/20 k8s svc 和 k8s pod 兩個網段
(6)Ingress Gateway 與 pilot 開啟2個pod(默認1個pod)
(7)Pod 綁定節點標簽 zone: sz
(8)Ingress Gateway 使用 HostNetwork 模式暴露
(9)overlays 字段用來修改對應組件的各個資源對象的 manifest
(10)調整 PDB 配置
(11)安裝前需要創建 grafana 和 kiali secret,用於登陸
(12)Ingress Gateway 從安全的角度來考慮,不應該暴露那些不必要的端口,對於 Ingress Gateway 來說,只需要暴露 HTTP、HTTPS 和 metrics 端口就夠了
8、開始安裝istio
istioctl manifest apply --set profile=demo
我是通過demo的方式來安裝istio的
查看部署情況
kubectl get pod --all-namespaces |grep istio istio-operator istio-operator-566d575bb8-srtf6 1/1 Running 6 16d istio-system grafana-7474bc54df-5pfkx 1/1 Running 6 15d istio-system istio-egressgateway-998849954-k7gzg 1/1 Running 5 15d istio-system istio-ingressgateway-6967594fff-2659x 1/1 Running 1 7d18h istio-system istio-tracing-58bdd77c47-wxkkc 1/1 Running 5 15d istio-system istiod-6d7bdbf797-xcwl6 1/1 Running 5 15d istio-system kiali-6b45fb76c4-llwnm 1/1 Running 4 15d istio-system prometheus-5dc45d847b-h57xf 2/2 Running 8 15d kube-system istio-cni-node-79crb 2/2 Running 11 15d kube-system istio-cni-node-dj5cl 2/2 Running 9 15d kube-system istio-cni-node-gc5pr 2/2 Running 9 15d kube-system istio-cni-node-s5msm 2/2 Running 11 15d
9、暴露端口
我的環境是通過ingress來暴露端口,使用的是traefik-ingress,本教程不提供traefik-ingress的安裝教程,后面會單獨出ingress教程。
apiVersion: extensions/v1beta1 kind: Ingress metadata: name: prometheus namespace: istio-system spec: rules: - host: prometheus.istio.io http: paths: - path: / backend: serviceName: prometheus servicePort: 9090 --- apiVersion: extensions/v1beta1 kind: Ingress metadata: name: grafana namespace: istio-system spec: rules: - host: grafana.istio.io http: paths: - path: / backend: serviceName: grafana servicePort: 3000 --- apiVersion: extensions/v1beta1 kind: Ingress metadata: name: servicegraph namespace: istio-system spec: rules: - host: servicegraph.istio.io http: paths: - path: / backend: serviceName: servicegraph servicePort: 8088 --- apiVersion: extensions/v1beta1 kind: Ingress metadata: name: tracing namespace: istio-system spec: rules: - host: tracing.istio.io http: paths: - path: / backend: serviceName: tracing servicePort: 80 --- apiVersion: extensions/v1beta1 kind: Ingress metadata: name: kiali namespace: istio-system spec: rules: - host: kiali.istio.io http: paths: - path: / backend: serviceName: kiali servicePort: 20001

