启动 Workload Onboarding Agent
创建文件 /etc/onboarding-agent/onboarding.config.yaml
,内容如下。
将 ONBOARDING_ENDPOINT_ADDRESS
替换为 你之前获取的值。
apiVersion: config.agent.onboarding.tetrate.io/v1alpha1
kind: OnboardingConfiguration
onboardingEndpoint:
host: "<ONBOARDING_ENDPOINT_ADDRESS>"
transportSecurity:
tls:
sni: onboarding-endpoint.example # (1)
workloadGroup: # (2)
namespace: bookinfo
name: ratings
workload:
labels:
version: v5 # (3)
settings:
connectedOver: INTERNET # (4)
此配置指示 Workload Onboarding Agent 使用一个地址连接到 Workload Onboarding Endpoint,但对 DNS 名称 onboarding-endpoint.example
进行 TLS 证书验证(1)。
代理将尝试加入你之前创建的 WorkloadGroup
(2)。
在(3)中指定的额外标签将与工作负载关联。它不会影响工作负载与 WorkloadGroup
的匹配。
此配置还指示 Workload Onboarding Agent 通知此工作负载通过 INTERNET
连接到网格的其他部分(而不是 VPC
)。网格中的其他节点将尝试使用工作负载的公共 IP 连接到此工作负载。由于你在不同网络中启动了 Kubernetes 集群和 EC2 实例,因此这是必需的。
在将上述配置文件放置在正确位置后,执行以下命令启动 Workload Onboarding Agent:
# 启用
sudo systemctl enable onboarding-agent
# 启动
sudo systemctl start onboarding-agent
通过执行以下命令验证 Istio Sidecar
是否已启动:
curl -f -i http://localhost:15000/ready
你应该会得到类似以下的输出:
HTTP/1.1 200 OK
content-type: text/plain; charset=UTF-8
server: envoy
LIVE
验证工作负载
从本地机器上,验证工作负载是否已正确加入。
执行以下命令:
kubectl get war -n bookinfo
如果工作负载已正确加入,你应该会得到类似以下的输出:
NAMESPACE NAME AGENT CONNECTED AGE
bookinfo ratings-aws-aws-123456789012-us-east-2b-ec2-i-1234567890abcdef0 True 1m
验证从 Kubernetes 到 VM 的流量
为了验证从 Kubernetes Pod 到 AWS EC2 实例的流量,对 Kubernetes 上部署的 Bookinfo 应用程序创建一些负载,并确认请求是否被路由到部署在 AWS EC2 实例上的 ratings
应用程序。
在本地机器上,如果尚未这样做,请设置端口转发。
然后运行以下命令:
for i in `seq 1 9`; do
curl -fsS "http://localhost:9080/productpage?u=normal" | grep "glyphicon-star" | wc -l | awk '{print $1" stars on the page"}'
done
其中两次中你应该会收到消息 10 stars on the page
。
此外,你可以通过检查 Istio sidecar 代理传输的入站 HTTP 请求的访问日志来验证 VM 是否接收流量。
执行以下命令:
journalctl -u onboarding-agent -o cat
你应该会看到类似以下的输出:
[2021-10-25T11:06:13.553Z] "GET /ratings/0 HTTP/1.1" 200 - via_upstream - "-" 0 48 3 2 "-" "curl/7.68.0" "1928e798-dfe7-45a6-9020-d0f3a8641d03" "172.31.7.211:9080" "127.0.0.1:9080" inbound|9080|| 127.0.0.1:40992 172.31.7.211:9080 172.31.7.211:35470 - default
验证从 VM 到 Kubernetes 的流量
SSH 进入 AWS EC2 实例并执行以下命令:
for i in `seq 1 5`; do
curl -i \
--resolve details.bookinfo:9080:127.0.0.2 \
details.bookinfo:9080/details/0
done
上述命令将向 Bookinfo details
应用程序
发出 5
个 HTTP 请求。
curl
将解析 Kubernetes 集群的本地 DNS 名称 details.bookinfo
,将其解析为 Istio 代理的 egress
监听器的 IP 地址(根据你之前创建的 sidecar 配置为 127.0.0.2
)。
你应该会得到类似以下的输出:
HTTP/1.1 200 OK
content-type: application/json
server: envoy
{"id":0,"author":"William Shakespeare","year":1595,"type":"paperback", "pages":200,"publisher":"PublisherA","language":"English", "ISBN-10":"1234567890","ISBN-13":"123-1234567890"}