十一 Istio:向istio服務網格中引入虛擬機( 三 )

$ scp $WORK_DIR/* [USERNAME]@[INSTANCE_IP]:~ Enter passphrase for key '/Users/peterj/.ssh/id_rsa': bash: warning: setlocale: LC_ALL: cannot change locale (en_US.UTF-8) cluster.env100%58912.6KB/s00:00 hosts100%380.8KB/s00:00 istio-token100%90619.4KB/s00:00 mesh.yaml100%66714.4KB/s00:00 root-cert.pem100% 109423.5KB/s00:00或者,你可以使用 gcloud 命令和實例名稱: gcloud compute scp --zone=us-west1-b ${WORK_DIR}/* [INSTANCE_NAME]:~ 。

  1. SSH 進入實例,將根證書復制到 /etc/certs
sudo mkdir -p /etc/certs sudo cp root-cert.pem /etc/certs/root-cert.pem
  1. 拷貝 istio-token 文件到 /var/run/secrets/tokens 目錄:
sudo mkdir -p /var/run/secrets/tokens sudo cp istio-token /var/run/secrets/tokens/istio-token
  1. 下載和安裝 Istio sidecar 包:
curl -LO https://storage.googleapis.com/istio-release/releases/1.10.3/deb/istio-sidecar.deb sudo dpkg -i istio-sidecar.deb
  1. 拷貝 cluster.env/var/lib/istio/envoy/
sudo cp cluster.env /var/lib/istio/envoy/cluster.env
  1. 將 Mesh 配置(mesh.yaml)添加到/etc/istio/config/mesh
sudo cp mesh.yaml /etc/istio/config/mesh
  1. 將 istiod host 添加到 /etc/hosts 文件中:
sudo sh -c 'cat $(eval echo ~$SUDO_USER)/hosts >> /etc/hosts'
  1. /etc/certs/var/lib/istio/envoy 的所有者修改為 Istio proxy:
sudo mkdir -p /etc/istio/proxy sudo chown -R istio-proxy /var/lib/istio /etc/certs /etc/istio/proxy /etc/istio/config /var/run/secrets /etc/certs/root-cert.pem以上都就緒后,就可以在虛擬機中啟動 Istio:
sudo systemctl start istio此刻,虛擬機被配置為與 Kubernetes 集群中 Istio 的控制平面通信 。
4.5 從虛擬機訪問服務讓我們在 Kubernetes 集群中部署一個 Hello world 應用程序 。首先,我們需要在 default 命名空間中啟用自動 sidecar 注入:
$ kubectl label namespace default istio-injection=enabled namespace/default labeled接下來,創建 Hello world 的部署和服務 。
apiVersion: apps/v1 kind: Deployment metadata:name: hello-worldlabels:app: hello-world spec:replicas: 1selector:matchLabels:app: hello-worldtemplate:metadata:labels:app: hello-worldspec:containers:- image: gcr.io/tetratelabs/hello-world:1.0.0imagePullPolicy: Alwaysname: svcports:- containerPort: 3000 --- kind: Service apiVersion: v1 metadata:name: hello-worldlabels:app: hello-world spec:selector:app: hello-worldports:- port: 80name: httptargetPort: 3000將上述文件保存為 hello-world.yaml,并使用 kubectl apply -f hello-world.yaml 進行部署 。
等待 Pod 準備好,然后回到虛擬機上,嘗試訪問 Kubernetes 服務:
【十一 Istio:向istio服務網格中引入虛擬機】 $ curl http://hello-world.default Hello World你可以從虛擬機上訪問在你的 Kubernetes 集群內運行的任何服務 。
4.6 在虛擬機上運行服務我們也可以在虛擬機上運行一個工作負載 。切換到實例上,運行一個簡單的 Python HTTP 服務器:
$ sudo python3 -m http.server 80 Serving HTTP on 0.0.0.0 port 8000 (http://0.0.0.0:8000/) ...如果你試圖直接 curl 到實例 IP,你會得到一個響應(目錄列表) 。:
$ curl [INSTANCE_IP] <!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> ...但我們要做的是將工作負載(Python HTTP 服務)添加到網格中 。出于這個原因 , 我們在前面創建了虛擬機命名空間 。所以讓我們創建一個代表虛擬機工作負載的 Kubernetes 服務 。注意 , 名稱和標簽值等于我們之前設置的 VM_APP 環境變量的值 。不要忘記將服務部署到 VM_NAMESPACE 。
apiVersion: v1 kind: Service metadata:name: hello-vmlabels:app: hello-vm spec:ports:- port: 80name: http-vmtargetPort: 80selector:app: hello-vm將上述文件保存為 hello-vm-service.yaml,并使用 kubectl apply -f hello-vm-service.yaml -n vm-namespace 將其部署到 VM 命名空間 。
因為我們沒有使用實驗性的虛擬機自動注冊,它將自動創建 WorkloadEntry 資源,我們需要手動創建它們 。
我們需要一個代表虛擬機工作負載的 WorkloadEntry 資源——該資源使用虛擬機服務賬戶(

推薦閱讀