12.5.1 部署控制平面

从共享的根CA为每个集群的Citadel生成中间CA证书,共享的根CA启用跨不同集群的双向TLS通信。为了便于说明,我们将samples/certs目录下Istio安装中提供的示例根CA证书用于两个集群。在实际部署中,你可能会为每个集群使用不同的CA证书,所有CA证书都由公共根CA签名。

图12-4 多控制平面

在每个Kubernetes集群中实施以下步骤,以在所有集群中部署相同的Istio控制平面配置。

1)使用以下的命令为生成的CA证书创建Kubernetes密钥,如下所示:


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

2)安装Istio的CRD并等待几秒钟,以便将它们提交给Kubernetes API服务器,如下所示:


for i in install/kubernetes/helm/istio-init/files/crd*yaml; do kubectl apply -f $i; done

3)部署Istio控制平面:如果helm依赖项缺失或者不是最新的,可以通过helm dep update来更新这些依赖项。注意因为没有使用istio-cni,可以暂时将其从依赖项requirements.yaml中去掉再执行更新操作。具体执行命令如下:


helm template install/kubernetes/helm/istio --name istio --namespace istio-system \
  -f install/kubernetes/helm/istio/values-istio-multicluster-gateways.yaml > ./istio.yaml
kubectl apply -f ./istio.yaml

确保上述步骤在每个Kubernetes集群中都执行成功。当然,通过helm生成istio.yaml的命令执行一次即可。