配置 WorkloadGroup 和 Sidecar

查看本文大纲

你将在 AWS EC2 实例上部署 ratings 应用程序,并将其加入到服务网格中。

创建 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: vm
      cloud: aws
    network: aws                      # (1)
    serviceAccount: bookinfo-ratings  # (2)
EOF

字段 spec.template.network 设置为非空值,以指示 Istio 控制平面,你稍后将创建的 VM 没有直接连接到 Kubernetes Pods。

字段 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: vm
  ingress:
  - defaultEndpoint: 127.0.0.1:9080  # (2)
    port:
      name: http
      number: 9080                   # (3)
      protocol: HTTP
  egress:
  - bind: 127.0.0.2                  # (4)
    port:
      name: http
      number: 9080                   # (5)
      protocol: HTTP
    hosts:
    - ./*                            # (6)
EOF

上述 sidecar 配置将仅应用于具有标签 app=ratingsclass=vm(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 EC2 实例的任何实例 通过执行以下命令加入 bookinfo 命名空间中的任何 WorkloadGroup。将 <AWS_ACCOUNT_ID> 替换为适当的值。

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

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