12.4.2 Istio控制平面组件

在部署全套Istio控制平面组件的集群cluster1中,按照以下步骤执行:

1)安装Istio的CRD并等待几秒钟,以便将它们提交给Kubernetes API服务器,如下所示:


for i in install/kubernetes/helm/istio-init/files/crd*yaml; do kubectl apply -f $i; done

2)然后开始在集群cluster1中部署Istio控制平面。

如果helm依赖项缺失或者不是最新的,可以通过helm dep update来更新这些依赖项。需要注意的是,因为没有使用istio-cni,可以暂时将其从依赖项requirements.yaml中去掉再执行更新操作。具体命令如下所示:


helm template --name=istio --namespace=istio-system \
--set global.mtls.enabled=true \
--set security.selfSigned=false \
--set global.controlPlaneSecurityEnabled=true \
--set global.meshExpansion.enabled=true \
--set global.meshNetworks.network2.endpoints[0].fromRegistry=n2-k8s-config \
--set global.meshNetworks.network2.gateways[0].address=0.0.0.0 \
--set global.meshNetworks.network2.gateways[0].port=15443 \
install/kubernetes/helm/istio > ./istio-auth.yaml

请注意,网关地址设置为0.0.0.0。这是一个临时占位符值,在集群cluster2部署之后将更新为其网关的公共IP值。

将Istio部署到cluster1,如下所示:


kubectl apply -f ./istio-auth.yaml

确保上述步骤在Kubernetes集群中执行成功。

3)创建网关以访问远程服务,如下所示:


kubectl create -f - <<EOF
apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
  name: cluster-aware-gateway
  namespace: istio-system
spec:
  selector:
    istio: ingressgateway
  servers:
  - port:
      number: 15443
      name: tls
      protocol: TLS
    tls:
      mode: AUTO_PASSTHROUGH
    hosts:
    - "*"
EOF

上述网关配置了一个专用端口15443用来将传入流量传递到请求的SNI标头中指定的目标服务,从源服务到目标服务一直使用双向TLS连接。

请注意虽然该网关定义应用于集群cluster1,但因为两个集群都与同一个Pilot进行通信,此网关实例同样也适用于集群cluster2。