备考ICA----Istio实验20—跨网络Primary-Remote主从架构部署
按照本实验在 cluster1(主集群)上安装 Istio 控制平面,并将 cluster2(远程集群)配置为使用 cluster1 中的控制平面。群集 cluster1 在 network1 网络上,而 cluster2 在 network2 网络上。这意味着 Pod 之间没有跨越群集边界的直接连接。
在此配置中,cluster1 中的 Istiod 将监视两个集群中的 APIServer 的端点。通过这种方式,控制平面将可以大概为两个集群中的工作负载提供服务发现。跨集群边界的服务工作负载通过用于东西向流量的专用网关举行间接通信。每个群会集的网关必须可以从另一个群会集访问。
cluster2 中的服务将通过雷同的 east-west gateway 到达集 cluster1 的控制平面。
1. 环境准备
确认2个集群存在
如果不存在,可以使用上个实验一样的命令举行创建
- kind create cluster --name cluster1
- kind create cluster --name cluster2
复制代码
上下文,api,metallb和istioctl安装创建见上一个实验
详细见前一个实验的1-3节内容
2. 为集群创建Secret
在每个集群中,创建一个名为 cacerts Secret 包含所有输入文件 ca-cert.pem、ca-key.pem、root-cert.pem 和 cert-chain.pe
2.1 cluster1
切换上下文在cluster1中执行
- cd certs/
- kubectl --context $CTX_CLUSTER1 create namespace istio-system
- kubectl --context $CTX_CLUSTER1 create secret generic cacerts -n istio-system \
- --from-file=cluster1/ca-cert.pem \
- --from-file=cluster1/ca-key.pem \
- --from-file=cluster1/root-cert.pem \
- --from-file=cluster1/cert-chain.pem
复制代码 确认secrets被精确创建
- kubectl --context $CTX_CLUSTER1 get secrets -n istio-system
复制代码 2.2 cluster2
切换上下文在cluster2中执行
- kubectl --context $CTX_CLUSTER2 create namespace istio-system
- kubectl --context $CTX_CLUSTER2 create secret generic cacerts -n istio-system \
- --from-file=cluster2/ca-cert.pem \
- --from-file=cluster2/ca-key.pem \
- --from-file=cluster2/root-cert.pem \
- --from-file=cluster2/cert-chain.pem
复制代码 确认secrets被精确创建
- kubectl --context $CTX_CLUSTER2 get secrets -n istio-system
复制代码
3. 为 cluster1配置primary控制平面
3.1 为cluster1设置默认网络
- kubectl --context="${CTX_CLUSTER1}" \
- label namespace istio-system \
- topology.istio.io/network=network1
复制代码 确认配置精确
- kubectl --context $CTX_CLUSTER1 get ns istio-system --show-labels
复制代码
3.2 istioctl安装文件
cluster1.yaml
- apiVersion: install.istio.io/v1alpha1
- kind: IstioOperator
- spec:
- values:
- global:
- meshID: mesh1
- multiCluster:
- clusterName: cluster1
- network: network1
复制代码 3.3 安装istiod控制平面
- cd
- istioctl install --context $CTX_CLUSTER1 -f cluster1.yaml -y
复制代码
3.4 cluster1上安装东西向网关
- istio/samples/multicluster/gen-eastwest-gateway.sh --mesh mesh1 \
- --cluster cluster1 --network network1 | \
- istioctl --context="${CTX_CLUSTER1}" install -y -f -
复制代码 确认服务精确创建
- kubectl --context="${CTX_CLUSTER1}" get svc istio-eastwestgateway -n istio-system
复制代码
3.5 放开cluster1中的服务
- kubectl --context="${CTX_CLUSTER1}" apply -n istio-system \
- -f istio/samples/multicluster/expose-services.yaml
复制代码 4. cluster2配置控制平面集群
4.1 为cluster2的命名空间打标签
为 istio-system 命名空间添加注解来识别应管理 cluster2 的外部控制平面集群
- kubectl --context="${CTX_CLUSTER2}" annotate namespace istio-system \
- topology.istio.io/controlPlaneClusters=cluster1
复制代码 4.2 为cluster1设置默认网络
- kubectl --context="${CTX_CLUSTER2}" \
- label namespace istio-system \
- topology.istio.io/network=network2
复制代码 确认label精确
- kubectl get ns istio-system --show-labels --context ${CTX_CLUSTER2}
复制代码
4.3 将cluster2设为从集群
确认cluster1的istio-eastwestgateway的external-ip
- kubectl get svc -n istio-system --context ${CTX_CLUSTER1} istio-eastwestgateway
复制代码
配置cluster2安装文件
cluster2.yaml
- apiVersion: install.istio.io/v1alpha1
- kind: IstioOperator
- spec:
- profile: remote
- values:
- istiodRemote:
- injectionPath: /inject/cluster/cluster2/net/network2
- global:
- remotePilotAddress: '172.18.0.221'
复制代码 安装生效
- istioctl install --context="${CTX_CLUSTER2}" -f cluster2.yaml -y
复制代码
为了提供对 cluster2 的 API 服务器访问,我们天生一个远程机密并将其应用于 cluster1
- istioctl create-remote-secret --context="${CTX_CLUSTER2}" --name=cluster2 | \
- kubectl apply -f - --context="${CTX_CLUSTER1}"
复制代码 验证是否天生完成
- kubectl get secrets --context ${CTX_CLUSTER1} -n istio-system
复制代码
5. 配置cluster2网关
5.1 在cluster2上安装东西网关
- cd istio
- samples/multicluster/gen-eastwest-gateway.sh --mesh mesh1 \
- --cluster cluster2 --network network2 | \
- istioctl --context="${CTX_CLUSTER2}" install -y -f -
复制代码
5.2 开放 cluster2 中的服务
- kubectl --context="${CTX_CLUSTER1}" apply -n istio-system \
- -f samples/multicluster/expose-services.yaml
复制代码 6. 部署测试环境
环境部署脚本
test.sh
- #!/bin/bash
- VERSION=$(ls ~ | grep istio)
- export CTX_CLUSTER1=kind-cluster1
- export CTX_CLUSTER2=kind-cluster2
- ############ Create ns sample in cluster1 cluster2 ############
- kubectl create --context="${CTX_CLUSTER1}" namespace sample
- kubectl create --context="${CTX_CLUSTER2}" namespace sample
- ############ Label ns sample istio-injection=enabled ############
- kubectl label --context="${CTX_CLUSTER1}" namespace sample istio-injection=enabled
- kubectl label --context="${CTX_CLUSTER2}" namespace sample istio-injection=enabled
- ############ deploy helloword in cluster1 cluster2 ############
- cd ~/istio
- kubectl apply --context="${CTX_CLUSTER1}" -f samples/helloworld/helloworld.yaml -l service=helloworld -n sample
- kubectl apply --context="${CTX_CLUSTER2}" -f samples/helloworld/helloworld.yaml -l service=helloworld -n sample
- ############ deploy helloword V1 in cluster1 ############
- kubectl apply --context="${CTX_CLUSTER1}" -f samples/helloworld/helloworld.yaml -l version=v1 -n sample
- kubectl get pod --context="${CTX_CLUSTER1}" -n sample -l app=helloworld
- ############ deploy helloword V2 in cluster2 ############
- kubectl apply --context="${CTX_CLUSTER2}" -f samples/helloworld/helloworld.yaml -l version=v2 -n sample
- kubectl get pod --context="${CTX_CLUSTER2}" -n sample -l app=helloworld
- ############ deploy sleep in cluster1 cluster2 ############
- kubectl apply --context="${CTX_CLUSTER1}" -f samples/sleep/sleep.yaml -n sample
- kubectl apply --context="${CTX_CLUSTER2}" -f samples/sleep/sleep.yaml -n sample
- kubectl get pod --context="${CTX_CLUSTER1}" -n sample -l app=sleep
- kubectl get pod --context="${CTX_CLUSTER2}" -n sample -l app=sleep
复制代码 部署
- chmod +x test.sh
- ./test.sh
复制代码
7. 测试
和上个实验一样
通过cluster1的sleep访问sample名称空间中的helloworld,理论上只应该返回v1的版本,但由于打通了cluster2,以是有一部分流量被分发到了cluster2上,由v2举行相应
- for x in {1..10};do kubectl exec --context="${CTX_CLUSTER1}" \
- -n sample deploy/sleep -- curl -s helloworld.sample:5000/hello;done
复制代码 同理cluster2上的sleep也一样
- for x in {1..10};do kubectl exec --context="${CTX_CLUSTER2}" \
- -n sample deploy/sleep -- curl -s helloworld.sample:5000/hello;done
复制代码
上一个实验是在2个集群上都安装了istiod,而本实验只在cluster1上搭建了istiod通过打通东西向gateway实现集群的互通
至此备考ICA----Istio实验20—跨网络Primary-Remote主从架构部署完成
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |