多集群istio service mesh--共享控制平面
作者:iyacontrol
出处:
在共享控制平面部署模型下 , 多个Kubernetes远程集群连接到在主集群中运行的共享Istio控制平面 。 远程群集可以与主群集位于同一网络中 , 也可以位于不同网络中 。 连接一个或多个远程集群后 , 主集群的控制平面将管理所有服务端点上的服务网格 。
文章插图
Istio网格跨越多个Kubernetes集群 , 可通过VPN直接访问远程Pod
先决条件
- 两个或更多运行受支持的Kubernetes版本(1.16、1.17、1.18)的集群 。
- 所有Kubernetes控制平面API服务器必须可相互路由 。
- 同一网络上的群集必须是RFC1918网络 , VPN或满足以下要求的替代的更高级的网络技术:
- 各个集群Pod CIDR范围和服务CIDR范围在整个网络中必须是唯一的 , 并且不能重叠 。
- 同一网络中的所有Pod CIDR必须彼此可路由 。
- 不同网络上的集群必须具有 istio-ingressgateway 服务 , 该服务可从其他每个集群访问 , 最好使用L4网络负载平衡器(NLB) 。 并非所有的云提供商都支持NLB , 并且某些云提供商需要使用特殊的注释才能使用它们 。
从组织的根CA为每个集群的CA生成中间CA证书 。 共享的根CA允许跨不同集群的相互TLS通信 。 为便于说明 , 以下说明将Istio示例目录中的证书用于两个集群 。
在网格中的每个集群上运行以下命令以安装证书 。 有关配置外部CA的更多详细信息 , 请参阅证书颁发机构(CA)证书 。
$ kubectl create namespace istio-system$ kubectl create secret generic cacerts -n istio-system \--from-file=samples/certs/ca-cert.pem \--from-file=samples/certs/ca-key.pem \--from-file=samples/certs/root-cert.pem \--from-file=samples/certs/cert-chain.pem
samples中的根证书和中间证书已广泛分发并广为人知 。 不要在生产中使用这些证书 , 因为这样集群将容易受到安全漏洞和危害 。跨集群控制平面访问
确定如何向远程集群公开主集群的Istiod发现服务 。 选择以下两个选项之一:
istio-ingressgateway
集群和网络命名确定网格中集群和网络的名称 。 这些名称将在mesh网络配置中以及配置mesh网络的服务注册表时使用 。 为每个集群分配一个唯一的名称 。 该名称必须是DNS标签名称 。 在下面的示例中 , 主集群称为 main0, 而远程群集为 remote0。$ export MAIN_CLUSTER_NAME=main0$ export REMOTE_CLUSTER_NAME=remote0
如果集群位于不同的网络上 , 请为每个网络分配一个唯一的网络名称 。$ export MAIN_CLUSTER_NETWORK=network1$ export REMOTE_CLUSTER_NETWORK=network2
如果集群在同一网络上 , 则这些集群使用相同的网络名称 。$ export MAIN_CLUSTER_NETWORK=network1$ export REMOTE_CLUSTER_NETWORK=network1
部署主集群创建主集群的配置 。 选择跨集群控制平面访问的两个选项之一 。
如果是选择 istio-ingressgateway , 则:
cat < istio-main-cluster.yamlapiVersion: install.istio.io/v1alpha1kind: IstioOperatorspec:values:global:multiCluster:clusterName: ${MAIN_CLUSTER_NAME}network: ${MAIN_CLUSTER_NETWORK}# Mesh network configuration. This is optional and may be omitted if# all clusters are on the same network.meshNetworks:${MAIN_CLUSTER_NETWORK}:endpoints:- fromRegistry: ${MAIN_CLUSTER_NAME}gateways:- registry_service_name: istio-ingressgateway.istio-system.svc.cluster.localport: 443${REMOTE_CLUSTER_NETWORK}:endpoints:- fromRegistry: ${REMOTE_CLUSTER_NAME}gateways:- registry_service_name: istio-ingressgateway.istio-system.svc.cluster.localport: 443# Use the existing istio-ingressgateway.meshExpansion:enabled: trueEOF
如果是选择内部负载均衡器 , 则:cat < istio-main-cluster.yamlapiVersion: install.istio.io/v1alpha1kind: IstioOperatorspec:values:global:multiCluster:clusterName: ${MAIN_CLUSTER_NAME}network: ${MAIN_CLUSTER_NETWORK}# Mesh network configuration. This is optional and may be omitted if# all clusters are on the same network.meshNetworks:${MAIN_CLUSTER_NETWORK}:endpoints:- fromRegistry: ${MAIN_CLUSTER_NAME}gateways:- registry_service_name: istio-ingressgateway.istio-system.svc.cluster.localport: 443${REMOTE_CLUSTER_NETWORK}:endpoints:- fromRegistry: ${REMOTE_CLUSTER_NAME}gateways:- registry_service_name: istio-ingressgateway.istio-system.svc.cluster.localport: 443# Change the Istio service `type=LoadBalancer` and add the cloud provider specific annotations. See# #internal-load-balancer for more# information. The example below shows the configuration for GCP/GKE.# If the GCP/GKE version is less than 1.16, add `network.gke.io/internal-load-balancer-allow-global-access: "true"` to the `service_annotations`.# See #tab-top.components:pilot:k8s:service:type: LoadBalancerservice_annotations:cloud.google.com/load-balancer-type: InternalEOF
- GB|备货充足要多少有多少,5000mAh+128GB,红米新机首销快速现货
- 占营收|华为值多少钱
- 查询|数据太多容易搞混?掌握这几个Excel小技巧,办公思路更清晰
- 商品|问道自有品牌,山姆多方博弈
- 垫底|5G用户突破2亿:联通垫底,电信月增700万,中国移动有多少?
- 色卡|双人场景/多机位色彩匹配,色卡很重要
- 砍单|iPhone12之后,拼多多又将iPhone12Pro拉下水
- 打响|拼多多打响双12首枪,iPhone12降到“mini价”,苹果11再见
- 不到|苹果赚了多少?iPhone12成本不到2500元,华为和小米的利润呢?
- 机器人|网络里面的假消息忽悠了非常多的小喷子和小机器人