在另一集群cluster2中部署istio-remote组件,按照以下步骤执行:
1)首先获取集群cluster1的入口网关地址,如下所示:
export LOCAL_GW_ADDR=$(kubectl get svc --selector=app=istio-ingressgateway \
-n istio-system -o jsonpath="{.items[0].status.loadBalancer.ingress[0].ip}")
通过执行以下命令,使用Helm创建Istio remote部署YAML文件:
helm template --name istio-remote --namespace=istio-system \
--values install/kubernetes/helm/istio/values-istio-remote.yaml \
--set global.mtls.enabled=true \
--set gateways.enabled=true \
--set security.selfSigned=false \
--set global.controlPlaneSecurityEnabled=true \
--set global.createRemoteSvcEndpoints=true \
--set global.remotePilotCreateSvcEndpoint=true \
--set global.remotePilotAddress=${LOCAL_GW_ADDR} \
--set global.remotePolicyAddress=${LOCAL_GW_ADDR} \
--set global.remoteTelemetryAddress=${LOCAL_GW_ADDR} \
--set gateways.istio-ingressgateway.env.ISTIO_META_NETWORK="network2" \
--set global.network="network2" \
install/kubernetes/helm/istio > istio-remote-auth.yaml
2)将Istio remote组件部署到cluster2,如下所示:
kubectl apply -f ./istio-remote-auth.yaml
确保上述步骤在Kubernetes集群中执行成功。
3)更新集群cluster1的配置项istio,获取集群cluster2的入口网关地址,如下所示:
export REMOTE_GW_ADDR=$(kubectl get --context=$CTX_REMOTE svc --selector=app=
istio-ingressgateway -n istio-system -o jsonpath="{.items[0].status.loadBalancer.ingress
[0].ip}")
在集群cluster1中编辑命名空间istio-system下的配置项istio,替换network2的网关地址,从0.0.0.0变成集群cluster2的入口网关地址${REMOTE_GW_ADDR}。保存后,Pilot将自动读取更新的网络配置。
4)创建集群cluster2的Kubeconf ig。通过以下命令,在集群cluster2上创建服务账号istio-multi的Kubeconf ig,并保存为文件n2-k8s-conf ig:
CLUSTER_NAME="cluster2"
SERVER=$(kubectl config view --minify=true -o "jsonpath={.clusters[].cluster.server}")
SECRET_NAME=$(kubectl get sa istio-multi -n istio-system -o jsonpath='{.secrets[].name}')
CA_DATA=$(kubectl get secret ${SECRET_NAME} -n istio-system -o "jsonpath={.data['ca\.crt']}")
TOKEN=$(kubectl get secret ${SECRET_NAME} -n istio-system -o "jsonpath={.data['token']}" | base64 --decode)
cat <<EOF > n2-k8s-config
apiVersion: v1
kind: Config
clusters:
- cluster:
certificate-authority-data: ${CA_DATA}
server: ${SERVER}
name: ${CLUSTER_NAME}
contexts:
- context:
cluster: ${CLUSTER_NAME}
user: ${CLUSTER_NAME}
name: ${CLUSTER_NAME}
current-context: ${CLUSTER_NAME}
users:
- name: ${CLUSTER_NAME}
user:
token: ${TOKEN}
EOF
5)将集群cluster2加入到Istio控制平面。在集群clusterl执行以下命令,将上述生成的集群cluster2的kubeconf ig添加到集群cluster1的secret中,执行这些命令后,集群cluster1中的Istio Pilot将开始监听集群cluster2的服务和实例,就像监听集群cluster1中的服务与实例一样:
kubectl create secret generic n2-k8s-secret --from-file n2-k8s-config -n istio-system kubectl label secret n2-k8s-secret istio/multiCluster=true -n istio-system