十一 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> ...

推薦閱讀