本指南介绍如何在 Anthos clusters on AWS 上进行 Anthos Service Mesh 版本 1.6.14-asm.2 的全新安装。
Anthos Service Mesh 预安装了 Istio 入站流量网关。但是,如果您希望使用入站流量控制器,则可以使用 Anthos Service Mesh 来设置 Kubernetes Ingress 资源。本指南介绍了如何安装 Anthos Service Mesh 并视需要设置 Kubernetes Ingress 资源。
准备工作
在开始安装 Anthos Service Mesh 之前,请确保您已执行以下任务:
要求
确保安装 Anthos Service Mesh 的用户集群至少具有 4 个 vCPU、15 GB 内存和 4 个副本。
在部署工作负载之前,请查看为服务端口命名。
确保您的集群版本列在受支持的环境中。
限制
一个 Google Cloud 项目只能关联一个网格。
设置环境
在要安装 Anthos Service Mesh 的机器上,您需要以下工具。请注意,您只能在用户集群上安装 Anthos Service Mesh,不能在管理员集群上安装。
curl
命令行工具。- Cloud SDK(
gcloud
命令行工具)。
安装 Cloud SDK 后:
使用 Cloud SDK 进行身份验证:
gcloud auth login
更新组件:
gcloud components update
安装
kubectl
:gcloud components install kubectl
安装所需的
kpt
版本:curl -L https://github.com/GoogleContainerTools/kpt/releases/download/v0.39.2/kpt_linux_amd64 > kpt_0_39_2 chmod +x kpt_0_39_2 alias kpt="$(readlink -f kpt_0_39_2)"
将上下文切换到用户集群:
kubectl config use-context CLUSTER_NAME
向您的用户帐号(您的 Google Cloud 登录电子邮件地址)授予集群管理员权限。您需要这些权限,以便为 Anthos Service Mesh 创建必要的基于角色的访问权限控制 (RBAC) 规则:
kubectl create clusterrolebinding cluster-admin-binding \ --clusterrole=cluster-admin \ --user=USER_ACCOUNT
下载安装文件
Linux
将 Anthos Service Mesh 安装文件下载到当前工作目录中:
curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.6.14-asm.2-linux-amd64.tar.gz
下载签名文件并使用
openssl
验证签名:curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.6.14-asm.2-linux-amd64.tar.gz.1.sig openssl dgst -verify /dev/stdin -signature istio-1.6.14-asm.2-linux-amd64.tar.gz.1.sig istio-1.6.14-asm.2-linux-amd64.tar.gz <<'EOF' -----BEGIN PUBLIC KEY----- MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEWZrGCUaJJr1H8a36sG4UUoXvlXvZ wQfk16sxprI2gOJ2vFFggdq3ixF2h4qNBt0kI7ciDhgpwS8t+/960IsIgw== -----END PUBLIC KEY----- EOF
预期输出为
Verified OK
。将文件内容提取到文件系统上的任意位置。例如,若要将内容提取到当前工作目录,请运行以下命令:
tar xzf istio-1.6.14-asm.2-linux-amd64.tar.gz
该命令会在当前工作目录中创建一个名为
istio-1.6.14-asm.2
的安装目录,其中包含:samples
目录中的示例应用。- 用于安装 Anthos Service Mesh 的
istioctl
命令行工具位于bin
目录中。 - Anthos Service Mesh 配置文件位于
manifests/profiles
目录中。
确保您位于 Anthos Service Mesh 安装的根目录。
cd istio-1.6.14-asm.2
Mac OS
将 Anthos Service Mesh 安装文件下载到当前工作目录中:
curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.6.14-asm.2-osx.tar.gz
下载签名文件并使用
openssl
验证签名:curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.6.14-asm.2-osx.tar.gz.1.sig openssl dgst -sha256 -verify /dev/stdin -signature istio-1.6.14-asm.2-osx.tar.gz.1.sig istio-1.6.14-asm.2-osx.tar.gz <<'EOF' -----BEGIN PUBLIC KEY----- MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEWZrGCUaJJr1H8a36sG4UUoXvlXvZ wQfk16sxprI2gOJ2vFFggdq3ixF2h4qNBt0kI7ciDhgpwS8t+/960IsIgw== -----END PUBLIC KEY----- EOF
预期输出为
Verified OK
。将文件内容提取到文件系统上的任意位置。例如,若要将内容提取到当前工作目录,请运行以下命令:
tar xzf istio-1.6.14-asm.2-osx.tar.gz
该命令会在当前工作目录中创建一个名为
istio-1.6.14-asm.2
的安装目录,其中包含:samples
目录中的示例应用。- 用于安装 Anthos Service Mesh 的
istioctl
命令行工具位于bin
目录中。 - Anthos Service Mesh 配置文件位于
manifests/profiles
目录中。
确保您位于 Anthos Service Mesh 安装的根目录。
cd istio-1.6.14-asm.2
Windows
将 Anthos Service Mesh 安装文件下载到当前工作目录中:
curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.6.14-asm.2-win.zip
下载签名文件并使用
openssl
验证签名:curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.6.14-asm.2-win.zip.1.sig openssl dgst -verify - -signature istio-1.6.14-asm.2-win.zip.1.sig istio-1.6.14-asm.2-win.zip <<'EOF' -----BEGIN PUBLIC KEY----- MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEWZrGCUaJJr1H8a36sG4UUoXvlXvZ wQfk16sxprI2gOJ2vFFggdq3ixF2h4qNBt0kI7ciDhgpwS8t+/960IsIgw== -----END PUBLIC KEY----- EOF
预期输出为
Verified OK
。将文件内容提取到文件系统上的任意位置。例如,若要将内容提取到当前工作目录,请运行以下命令:
tar xzf istio-1.6.14-asm.2-win.zip
该命令会在当前工作目录中创建一个名为
istio-1.6.14-asm.2
的安装目录,其中包含:samples
目录中的示例应用。- 用于安装 Anthos Service Mesh 的
istioctl
命令行工具位于bin
目录中。 - Anthos Service Mesh 配置文件位于
manifests/profiles
目录中。
确保您位于 Anthos Service Mesh 安装的根目录。
cd istio-1.6.14-asm.2
安装 Anthos Service Mesh
本部分介绍了如何在用户集群上安装 Anthos Service Mesh,用于启用 asm-multicloud
配置文件的支持的功能页面上列出的支持的默认功能。您可以选择为公共子网或专用子网启用 Ingress。
公开
如果需要,请切换到
istio-1.6.14-asm.2
目录。istioctl
客户端依赖于版本。请确保使用istio-1.6.14-asm.2/bin
目录中的版本。运行以下命令以安装 Anthos Service Mesh。如果您要启用受支持的可选功能,请在以下命令行中添加
-f
和 YAML 文件名。如需了解详情,请参阅启用可选功能。安装 Anthos Service Mesh:
bin/istioctl install \ -f manifests/profiles/asm-multicloud.yaml \ --set revision=asm-1614-2
--set revision
参数会将格式为istio.io/rev=asm-1614-2
的修订版本标签添加到istiod
。自动边车注入器网络钩子使用修订版本标签将注入的边车与特定istiod
修订版本相关联。如需为命名空间启用边车自动注入功能,您必须使用一个与istiod
上的标签匹配的修订版本来为其添加标签。配置验证网络钩子,使其能够使用修订版本标签查找
istiod
服务:kubectl apply -f istiod-service.yaml
此命令会创建一个服务条目,可让验证网络钩子在配置应用之前自动检查配置。
专用
在下面的代码中,您将 service.beta.kubernetes.io/aws-load-balancer-internal
注释添加到 Anthos Service Mesh 创建的所有服务中。如果存在此注释,则 Anthos clusters on AWS 会创建专用 Ingress 服务。
如果需要,请切换到
istio-1.6.14-asm.2
目录。istioctl
客户端依赖于版本。请确保使用istio-1.6.14-asm.2/bin
目录中的版本。将以下 YAML 保存到名为
istio-operator-internal-lb.yaml
的文件:apiVersion: install.istio.io/v1alpha1 kind: IstioOperator spec: components: ingressGateways: - enabled: true k8s: serviceAnnotations: service.beta.kubernetes.io/aws-load-balancer-internal: "true" name: istio-ingressgateway
运行以下命令以安装 Anthos Service Mesh。如果您要启用受支持的可选功能,请在以下命令行中添加
-f
和 YAML 文件名。如需了解详情,请参阅启用可选功能。bin/istioctl install \ -f manifests/profiles/asm-multicloud.yaml \ --set revision=asm-1614-2 \ -f istio-operator-internal-lb.yaml
--set revision
参数会将格式为istio.io/rev=asm-1614-2
的修订版本标签添加到istiod
。自动边车注入器网络钩子使用修订版本标签将注入的边车与特定istiod
修订版本相关联。如需为命名空间启用边车自动注入功能,您必须使用一个与istiod
上的标签匹配的修订版本来为其添加标签。配置验证网络钩子,使其能够使用修订版本标签查找
istiod
服务:kubectl apply -f istiod-service.yaml
此命令会创建一个服务条目,可让验证网络钩子在配置应用之前自动检查配置。
在没有 Prometheus 和 Kiali 的情况下安装
默认情况下,在 Anthos Service Mesh 1.7 及更早版本中,Anthos Service Mesh 会从 docker.io
和 quay.io
的原始软件包库中安装 Prometheus 和 Kiali。如果您不想安装这些工具或不允许连接到这些代码库,请将 -set addonComponents.prometheus.enabled=false
和 --set addonComponents.kiali.enabled=false
传递给 istioctl install
。例如,使用以下命令从公共子网安装排除 Prometheus 和 Kiali。
bin/istioctl install \
-f manifests/profiles/asm-multicloud.yaml \
--set addonComponents.prometheus.enabled=false \
--set addonComponents.kiali.enabled=false \
--revision=asm-1614-2
检查控制层面组件
检查 istio-system
中的控制层面 Pod 是否已启动:
kubectl get pod -n istio-system
预期输出如下所示:
NAME READY STATUS RESTARTS AGE istio-ingressgateway-74cc894bfd-786rg 1/1 Running 0 7m19s istiod-78cdbbbdb-d7tps 1/1 Running 0 7m36s promsd-576b8db4d6-lqf64 2/2 Running 1 7m19s
现在,您已经安装了预安装有入站网关的 Anthos Service Mesh 控制层面。如果您只需要使用 Ingress 控制器的 Ingress 功能,则可以在集群上安装应用了。请参阅创建示例 Deployment,了解如何配置 Ingress 资源。
如果您想要利用 Anthos Service Mesh 提供的所有功能,请继续进行安装的下一阶段,以注入边车代理并重启工作负载。
注入 Sidecar 代理
Anthos Service Mesh 使用 Sidecar 代理来增强网络安全性、可靠性和可观测性。借助 Anthos Service Mesh,这些功能可以从应用的主容器中抽象出来,并在作为同一 Pod 中单独的容器提供的常见进程外代理中实现。
在部署工作负载之前,请务必配置 Sidecar 代理注入,以便 Anthos Service Mesh 可以监控和保护流量。
安装 Anthos Service Mesh 之前在集群上运行的任何工作负载都需要注入或更新 Sidecar 代理,以使其具有当前 Anthos Service Mesh 版本。在部署工作负载之前,请务必配置 Sidecar 代理注入,以便 Anthos Service Mesh 可以监控和保护流量。
要启用 Sidecar 自动注入,请使用您在 istiod
上设置的同一修订版本来为命名空间添加标签。运行以下命令以显示 istiod
上的标签:
kubectl -n istio-system get pods -l app=istiod --show-labels
确认输出中包含修订版本标签 istio.io/rev=asm-1614-2
。这是您用于启用自动注入的标签。您可以使用一个命令来启用自动注入,例如:
kubectl label namespace NAMESPACE istio-injection-istio.io/rev=asm-1614-2 --overwrite
其中,NAMESPACE
是应用服务的命名空间的名称;如果未显式创建命名空间,则为 default
。
如需了解详情,请参阅注入 Sidecar 代理。
访问入站流量网关
Anthos Service Mesh 提供预配置的入站流量网关 istio-ingressgateway
,该网关可用于管理流向服务网格上运行的应用的入站流量。如需允许从集群外部(例如通过浏览器)访问应用,请执行以下操作:
您需要获取将
istio-ingressgateway
配置为使用的外部负载平衡器的外部 IP 地址或主机名和端口。您的应用必须定义网关和 VirtualService 资源,类似于 Online Boutique 示例应用的
frontend-gateway.yaml
。
如需获取 istio-ingressgateway
的外部地址,请执行以下操作:
创建
INGRESS_HOST
环境变量:export INGRESS_HOST=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.status.loadBalancer.ingress[0].hostname}')
创建
INGRESS_PORT
环境变量:export INGRESS_PORT=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.spec.ports[?(@.name=="http2")].port}')
如需进行测试,请部署一个示例应用,例如 Online Boutique。
如需通过浏览器访问该应用,请在网址中使用
$INGRESS_HOST:$INGRESS_PORT
的值。
问题排查
Anthos clusters on AWS 会要求标记包含负载平衡器端点的子网。Anthos clusters on AWS 会自动标记在 AWSCluster
资源的 spec.Networking.ServiceLoadBalancerSubnetIDs
字段中指定的所有子网。
如果您要向用户集群添加额外的子网,或者需要将标记重新应用到现有子网,请执行以下步骤。
在
anthos-aws
目录中,使用anthos-gke
将上下文切换到管理服务。cd anthos-aws anthos-gke aws management get-credentials
使用
kubectl
获取集群的 AWS VPC 的 ID,并将其存储为变量。export VPC_ID=$(\ env HTTP_PROXY=http://localhost:8118 \ kubectl get awscluster cluster-0 -o jsonpath='{.spec.networking.vpcID}')
使用
echo
检查变量内容。输出类似于vpc-12345678abcdef0
。echo $VPC_ID
将集群 ID 保存到环境变量。
export CLUSTER_ID=$(\ env HTTP_PROXY=http://localhost:8118 \ kubectl get awscluster cluster-0 -o jsonpath='{.status.clusterID}')
您可以使用
echo
检查变量:echo $CLUSTER_ID
响应包含您的集群 ID。
gke-12345678
如果您将 Anthos clusters on AWS 安装到专用 VPC 中,则可以使用
aws
命令行工具检索子网 ID。从以下选项中进行选择:
- 公共(如果要在公共子网上公开 Service)。
- 专用(如果要在专用子网上公开 Service)。
多个子网(如果要在多个子网上公开 Service)。
公开
export SUBNET_ID=$(aws ec2 describe-subnets \ --filters "Name=vpc-id,Values=$VPC_ID" "Name=tag:Name,Values=*public*" \ --query "Subnets[*].SubnetId" \ --output text)
输出内容是包含子网 ID 的对象。它类似于
subnet-1234abcdefg
。您可以使用echo
检查变量:echo $SUBNET_ID
响应会包含您的子网 ID。
subnet-012345678abcdef
专用
export SUBNET_ID=$(aws ec2 describe-subnets \ --filters "Name=vpc-id,Values=$VPC_ID" "Name=tag:Name,Values=*private*" \ --query "Subnets[*].SubnetId" \ --output text)
输出内容是包含子网 ID 的对象。它类似于
subnet-1234abcdefg
。您可以使用echo
检查变量:echo $SUBNET_ID
响应会包含您的子网 ID。
subnet-012345678abcdef
多个子网
如果您为 AWSNodePool 使用多个子网(例如,如果您使用多个可用性区域),则需要单独标记子网 ID。
使用
aws ec2 describe-subnets
检索子网 ID 的列表。如需获取所有公共子网的列表,请运行以下命令:
aws ec2 describe-subnets \ --filters "Name=vpc-id,Values=$VPC_ID" "Name=tag:Name,Values=*public*" \ --query "Subnets[*].SubnetId" \ --output text
如需获取所有专用子网的列表,请运行以下命令:
aws ec2 describe-subnets \ --filters "Name=vpc-id,Values=$VPC_ID" "Name=tag:Name,Values=*private*" \ --query "Subnets[*].SubnetId" \ --output text
响应会包含您的子网 ID。
subnet-012345678abcdef subnet-abcdef123456789 subnet-123456789abcdef
使用集群 ID 标记您的子网。如果您拥有多个子网,请选择“多个子网”。
单个子网
aws ec2 create-tags \ --resources $SUBNET_ID \ --tags Key=kubernetes.io/cluster/$CLUSTER_ID,Value=shared
多个子网
针对您的每个子网运行以下命令:
aws ec2 create-tags \ --resources subnet-ids \ --tags Key=kubernetes.io/cluster/$CLUSTER_ID,Value=shared
将 subnet-ids 替换为子网 ID 列表,以空格分隔。例如
subnet-012345678abcdef subnet-abcdef123456789 subnet-123456789abcdef
。
后续步骤
在 Anthos clusters on AWS 上创建示例部署。