从本地虚拟机上进行工作负载载入

启动工作负载载入代理

创建文件 /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)

此配置指示工作负载载入代理使用一个地址连接到工作负载载入终端点,但对 DNS 名称 onboarding-endpoint.example 验证 TLS 证书 (1)。

代理将尝试加入你之前创建的 WorkloadGroup (2)。

在 (3) 中指定的额外标签将与工作负载关联,但不会影响工作负载与 WorkloadGroup 的匹配。

此配置暗示 Kubernetes 集群和本地虚拟机位于同一网络或已连接的网络中。

将上述配置文件放置在正确的位置后,执行以下命令以启动工作负载载入代理:

# 启用
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-jwt-my-corp--vm007-datacenter1-us-east.internal.corp   True              1m

验证从 Kubernetes 到本地虚拟机的流量

要验证从 Kubernetes Pod 到本地虚拟机的流量,请在 Kubernetes 上部署的 Bookinfo 应用程序上创建一些负载,并确认请求被路由到本地虚拟机上部署的 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 请求的访问日志来验证虚拟机是否接收到流量。

执行以下命令:

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

验证从本地虚拟机到 Kubernetes 的流量

SSH 进入本地虚拟机并执行以下命令:

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"}