使用 Google Kubernetes Engine 快速开始

依照以下操作指南为 Istio 准备一个 GKE 集群。

  1. 创建一个新集群。

    1. $ export PROJECT_ID=`gcloud config get-value project` && \
    2. export M_TYPE=n1-standard-2 && \
    3. export ZONE=us-west2-a && \
    4. export CLUSTER_NAME=${PROJECT_ID}-${RANDOM} && \
    5. gcloud services enable container.googleapis.com && \
    6. gcloud container clusters create $CLUSTER_NAME \
    7. --cluster-version latest \
    8. --machine-type=$M_TYPE \
    9. --num-nodes 4 \
    10. --zone $ZONE \
    11. --project $PROJECT_ID

    Istio 的默认安装要求节点 vCPU 大于 1,如果您要使用配置文件示例, 您可以删除 --machine-type 参数,以使用较小的 n1-standard-1 机器配置代替。

    要在 GKE 上使用 Istio CNI 功能,请查看 CNI 安装指南了解集群配置步骤的先决条件。

    Private GKE Cluster

    istiod 检测 Validation Webhook 需要 15017 端口,但自动创建的防火墙规则不会打开这个端口。

    根据以下操作查看防火墙规则以允许 Master 访问:

    1. $ gcloud compute firewall-rules list --filter="name~gke-${CLUSTER_NAME}-[0-9a-z]*-master"

    替换当前的防火墙规则以允许 Master 访问:

    1. $ gcloud compute firewall-rules update <firewall-rule-name> --allow tcp:10250,tcp:443,tcp:15017
  2. kubectl 获取认证凭据。

    1. $ gcloud container clusters get-credentials <cluster-name> \
    2. --zone <zone> \
    3. --project <project-id>
  3. 为 Istio 创建 RBAC 规则,需要授予当前用户集群管理员(admin)权限,根据如下命令进行授权操作。

    1. $ kubectl create clusterrolebinding cluster-admin-binding \
    2. --clusterrole=cluster-admin \
    3. --user=$(gcloud config get-value core/account)

多集群通信

在某些情况下,必须明确创建防火墙规则以允许跨集群流量。

以下说明将允许您项目中所有集群之间的通信。根据需要调整命令。

  1. 收集有关集群网络的信息。

    1. $ function join_by { local IFS="$1"; shift; echo "$*"; }
    2. $ ALL_CLUSTER_CIDRS=$(gcloud --project $PROJECT_ID container clusters list --format='value(clusterIpv4Cidr)' | sort | uniq)
    3. $ ALL_CLUSTER_CIDRS=$(join_by , $(echo "${ALL_CLUSTER_CIDRS}"))
    4. $ ALL_CLUSTER_NETTAGS=$(gcloud --project $PROJECT_ID compute instances list --format='value(tags.items.[0])' | sort | uniq)
    5. $ ALL_CLUSTER_NETTAGS=$(join_by , $(echo "${ALL_CLUSTER_NETTAGS}"))
  2. 创建防火墙规则。

    1. $ gcloud compute firewall-rules create istio-multicluster-pods \
    2. --allow=tcp,udp,icmp,esp,ah,sctp \
    3. --direction=INGRESS \
    4. --priority=900 \
    5. --source-ranges="${ALL_CLUSTER_CIDRS}" \
    6. --target-tags="${ALL_CLUSTER_NETTAGS}" --quiet