在部署全套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。