Istio 1.5 部署安装
前言
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