十一 Istio:向istio服务网格中引入虚拟机( 四 )

SERVICE_ACCOUNT)和标签中的应用程序名称(VM_APP) 。
请注意,我们还需要获得虚拟机的内部 IP 地址,这样 Istio 就知道在哪里可以到达虚拟机 。让我们把它存储在另一个环境变量中(确保用你的值替换 INSTANCE_NAMEZONE) 。
export VM_IP=$(gcloud compute instances describe [INSTANCE_NAME] --format='get(networkInterfaces[0].networkIP)' --zone=[ZONE])我们现在可以创建 WorkloadEntry 资源:
cat <<EOF > workloadentry.yaml apiVersion: networking.istio.io/v1alpha3 kind: WorkloadEntry metadata:name: ${VM_APP}namespace: ${VM_NAMESPACE} spec:serviceAccount: ${SERVICE_ACCOUNT}address: ${VM_IP}labels:app: ${VM_APP}instance-id: vm1 EOF将上述文件保存为 workloadentry.yaml , 然后在 $VM_NAMESPACE 命名空间创建资源:
kubectl apply -n ${VM_NAMESPACE} -f workloadentry.yaml为了把虚拟机的工作负载加入到网格内,我们还需要定义 ServiceEntry:
cat <<EOF > serviceentry.yaml apiVersion: networking.istio.io/v1alpha3 kind: ServiceEntry metadata:name: ${VM_APP} spec:hosts:- ${VM_APP}location: MESH_INTERNALports:- number: 80name: httpprotocol: HTTPtargetPort: 80resolution: STATICworkloadSelector:labels:app: ${VM_APP}

请注意,WorkloadEntry 和 ServiceEntry 在未来最终将自动创建 。
$VM_NAMESPACE 中创建服务条目资源 。
kubectl apply -n ${VM_NAMESPACE} -f serviceentry.yaml我们现在可以使用 Kubernetes 服务名称 hello-vm.vm-namespace 来访问虚拟机上的工作负载 。让我们在集群内运行一个 Pod , 并尝试从那里访问该服务:
$ kubectl run curl --image=radial/busyboxplus:curl -i --tty If you don't see a command prompt, try pressing enter. [ root@curl:/ ]$在你得到 Pod 中的命令提示后,你可以运行 curl 并访问工作负载 。你应该看到一个目录列表的响应 。同样地,你会注意到在 HTTP 服务器运行的实例上有一个日志条目:
[ root@curl:/ ]$ curl hello-vm.vm-namespace <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dt d"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>Directory listing for /</title> </head> <body> <h1>Directory listing for /</h1> <hr> ...

推荐阅读