在所谓的本地集群上安装一个Istio控制平面的过程,与在单集群上安装Istio并没有太多差别,需要注意的一点是如何配置Envoy代理用于管理直接访问某个IP范围内的外部服务的参数。如果是使用Helm安装Istio,那么在Helm中有一个名为global.proxy.includeIPRanges的变量,确保该变量为“*”或者包括本地集群、所有远程集群的pod CIDR范围和服务CIDR。
可以通过查看命名空间istio-system下的配置项istio-sidecar-injector中的traff ic.sidecar.istio.io/includeOutboundIPRanges来确认global.proxy.includeIPRanges参数设置,如下所示:
kubectl get configmap istio-sidecar-injector -n istio-system -o yaml| grep includeOutboundIPRanges 'traffic.sidecar.istio.io/includeOutboundIPRanges' \"*\" ]]\"\n - \"-x\"\n
在部署Istio控制平面组件的集群cluster1中,按照以下步骤执行。
1)如果启用了双向TLS通信,则需要如下配置参数:
helm template --namespace=istio-system \ --values install/kubernetes/helm/istio/values.yaml \ --set global.mtls.enabled=true \ --set security.selfSigned=false \ --set global.controlPlaneSecurityEnabled=true \ install/kubernetes/helm/istio > istio-auth.yaml kubectl apply -f istio-auth.yaml
2)如果不需要启用双向TLS通信,配置参数则需要做出如下修改:
helm template --namespace=istio-system \ --values install/kubernetes/helm/istio/values.yaml \ --set global.mtls.enabled=false \ --set security.selfSigned=true \ --set global.controlPlaneSecurityEnabled=false \ install/kubernetes/helm/istio > istio-noauth.yaml kubectl apply -f istio-noauth.yaml
修改Istio服务istio-pilot、istio-telemetry、istio-policy及zipkin的类型为内网负载均衡,将这些服务以内网方式暴露给远程集群使用。不同的云厂商实现机制不尽相同,但大都是通过修改annotation的方式实现。针对阿里云容器服务来说,设置为内网负载均衡的方式非常简单,只需要添加如下annotation到服务的YAML定义中即可:
service.beta.kubernetes.io/alicloud-loadbalancer-address-type: intranet
此外,需要按照图12-2中的端口定义为每一个服务进行设置。

图12-2 服务设置
istio-pilot服务端口如表12-2所示。
表12-2 istio-pilot服务端口说明

istio-telemetry服务端口如表12-3所示。
表12-3 istio-telemetry服务端口说明

istio-policy服务端口如表12-4所示。
表12-4 istio-policy服务端口说明

zipkin服务端口如表12-5所示。
表12-5 zipkin服务端口说明
