12.3.4 部署本地控制平面

在所谓的本地集群上安装一个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服务端口说明