1. 程式人生 > >Istio多叢集(1)-多控制面

Istio多叢集(1)-多控制面

## Istio多叢集(1)-多控制面 參考自[官方文件](https://istio.io/latest/docs/setup/install/multicluster/gateways/)。 [TOC] ### 複製控制面 本節將使用多個主叢集(帶控制面的叢集)來部署Istio[多叢集](https://preliminary.istio.io/latest/docs/ops/deployment/deployment-models/#multiple-clusters),每個叢集都有自己的[控制面](https://preliminary.istio.io/latest/docs/ops/deployment/deployment-models/#control-plane-models),叢集之間使用gateway進行通訊。 由於不使用共享的控制面來管理網格,因此這種配置下,每個叢集都有自己的控制面來管理後端應用。為了策略執行和安全目的,所有的群集都處於一個公共的管理控制之下。 通過複製共享服務和名稱空間,並在所有叢集中使用一個公共的根CA證書,可以實現單個Istio服務網格跨叢集通訊。 ![](https://img2020.cnblogs.com/blog/1334952/202009/1334952-20200925125143585-1811497649.png) #### 要求 - 兩個或多個kubernees叢集,版本為1.17,1.18,1.19 - 在每個kubernetes叢集上[部署Istio控制面](https://preliminary.istio.io/latest/docs/setup/install/istioctl/) - 每個叢集中的`istio-ingressgateway`的服務IP地址必須能夠被所有的叢集訪問,理想情況下,使用L4網路負載平衡器(NLB)。 - 根CA。跨叢集通訊需要在服務之間使用mutual TLS。為了在跨叢集通訊時啟用mutual TLS,每個叢集的Istio CA必須配置使用共享的CA證書生成的中間CA。出於演示目的,將會使用Istio的`samples/certs`安裝目錄下的根CA證書。 #### 在每個叢集中部署Istio控制面 1. 使用自定義的根CA為每個叢集生成中間CA證書,使用共享的根CA來為跨叢集的通訊啟用mutual TLS。 出於演示目的,下面使用了istio樣例目錄中的證書。在真實部署時,應該為每個叢集選擇不同的CA證書,這些證書由一個共同的根CA簽發。 2. 在每個叢集中執行如下命令來為所有叢集部署相同的Istio控制面。 - 為生成的CA建立一個kubernetes secret。它與[在Istio中插入自定義的CA](https://preliminary.istio.io/latest/docs/tasks/security/cert-management/plugin-ca-cert/)一文中的方式類似。 > 生產中不能使用samples 目錄中的證書,有安全風險。 ```shell $ 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 ``` - 部署Istio,部署後會在`istio-system`名稱空間中建立一個pod `istiocoredns`,用於提供到`global`域的DNS解析,其配置檔案如下: ```shell # cat Corefile .:53 { errors health # Removed support for the proxy plugin: https://coredns.io/2019/03/03/coredns-1.4.0-release/ grpc global 127.0.0.1:8053 forward . /etc/resolv.conf { except global } prometheus :9153 cache 30 reload } ``` ```shell $ istioctl install -f manifests/examples/multicluster/values-istio-multicluster-gateways.yaml ``` #### 配置DNS 當為遠端叢集中的服務提供DNS解析時,現有應用程式無需修改即可執行,因為應用程式通常會訪問通過DNS解析出的IP。Istio本身並不需要DNS在服務之間路由請求。本地服務會共享一個共同的DNS字首(即,`svc.cluster.local`)。kubernetes DNS為這些服務提供了DNS解析。 為了給遠端叢集提供一個類似的服務配置,需要使