配置 AWS ECS 工作负载的 WorkloadGroup 和 Sidecar

你将部署 ratings 应用程序作为 AWS ECS 任务,并将其加入服务网格。

创建 WorkloadGroup

执行以下命令创建一个 WorkloadGroup

cat <<EOF | kubectl apply -f -
apiVersion: networking.istio.io/v1alpha3
kind: WorkloadGroup
metadata:
  name: ratings
  namespace: bookinfo
  labels:
    app: ratings
spec:
  template:
    labels:
      app: ratings
      class: ecs
      cloud: aws
    serviceAccount: bookinfo-ratings
EOF

字段 spec.template.serviceAccount 声明了工作负载将具有 Kubernetes 集群内的服务账号 bookinfo-ratings 的身份。服务账号 bookinfo-ratings 是在之前部署 Istio bookinfo 示例时创建的。

创建 Sidecar 配置

执行以下命令创建一个新的 Sidecar 配置:

cat <<EOF | kubectl apply -f -
apiVersion: networking.istio.io/v1beta1
kind: Sidecar
metadata:
  name: bookinfo-ratings-no-iptables
  namespace: bookinfo
spec:
  workloadSelector:                  # (1)
    labels:
      app: ratings
      class: ecs
  ingress:
  - defaultEndpoint: 127.0.0.1:9080  # (2)
    port:
      name: http
      number: 9080                   # (3)
      protocol: HTTP
  egress:
  - bind: 127.0.0.2                  # (4)
    port:
      number: 9080                   # (5)
    hosts:
    - ./*                            # (6)
EOF

上述 Sidecar 配置仅适用于具有标签 app=ratingsclass=ecs(1)的工作负载。你已经创建的 WorkloadGroup 具有这些标签。

Istio 代理将配置为侦听 <主机 IP>:9080(3),并将 传入 请求转发到侦听 127.0.0.1:9080(2)的应用程序。

最后,代理将配置为侦听 127.0.0.2:9080(4)(5),以将应用程序的 传出 请求代理到其他服务(6),这些服务使用端口 9080(5)。

允许工作负载加入 WorkloadGroup

你需要创建一个 OnboardingPolicy 资源,以明确授权在 Kubernetes 外部部署的工作负载加入网格。

首先,获取你的 AWS 帐户 ID。如果不知道你的 AWS 帐户 ID,请参阅 AWS 帐户文档 以获取有关如何查找你的 ID 的更多详细信息。

如果已经设置了你的 aws CLI,可以执行以下命令:

AWS_ACCOUNT_ID=$(aws sts get-caller-identity --query Account --output text)

然后,通过执行以下命令,创建一个 OnboardingPolicy,以允许你 AWS 帐户 ID 拥有的任何 AWS ECS 任务加入 bookinfo 命名空间中的任何 WorkloadGroup。将 <AWS_ACCOUNT_ID> 替换为适当的值。

cat <<EOF | kubectl apply -f -
apiVersion: authorization.onboarding.tetrate.io/v1alpha1
kind: OnboardingPolicy
metadata:
  name: allow-ecs
  namespace: bookinfo            # (1)
spec:
  allow:
  - workloads:
    - aws:
        accounts:
        - "<AWS_ACCOUNT_ID>"     # (2)
        ecs: {}                  # (3)
    onboardTo:
    - workloadGroupSelector: {}  # (4)
EOF

上述策略适用于由 (2) 中指定的帐户拥有的任何 AWS ECS 任务 (3),并允许它们加入 bookinfo 命名空间 (1) 中的任何 WorkloadGroup (4)。