虛擬機器安裝

按照本指南部署 Istio 並將虛擬機器連接到它。

先決條件

  1. 下載 Istio 版本
  2. 執行任何必要的平台特定設定
  3. 檢查Pod 和服務的需求
  4. 虛擬機器必須具有與連接網格中的入口閘道器的 IP 連線能力,如果需要增強效能,還可以選擇透過 L3 網路連接網格中的每個 Pod。
  5. 了解虛擬機器架構,以了解 Istio 虛擬機器整合的高階架構。

準備指南環境

  1. 建立虛擬機器

  2. 在您用來設定叢集的機器上設定環境變數 VM_APPWORK_DIRVM_NAMESPACESERVICE_ACCOUNT。(例如,WORK_DIR="${HOME}/vmintegration"

    $ VM_APP="<the name of the application this VM will run>"
    $ VM_NAMESPACE="<the name of your service namespace>"
    $ WORK_DIR="<a certificate working directory>"
    $ SERVICE_ACCOUNT="<name of the Kubernetes service account you want to use for your VM>"
    $ CLUSTER_NETWORK=""
    $ VM_NETWORK=""
    $ CLUSTER="Kubernetes"
    
  3. 在您用來設定叢集的機器上建立工作目錄

    $ mkdir -p "${WORK_DIR}"
    

安裝 Istio 控制平面

如果您的叢集已經有 Istio 控制平面,您可以跳過安裝步驟,但仍然需要公開控制平面以供虛擬機器存取。

安裝 Istio 並在叢集上公開控制平面,以便您的虛擬機器可以存取它。

  1. 建立用於安裝的 IstioOperator 規格。

    $ cat <<EOF > ./vm-cluster.yaml
    apiVersion: install.istio.io/v1alpha1
    kind: IstioOperator
    metadata:
      name: istio
    spec:
      values:
        global:
          meshID: mesh1
          multiCluster:
            clusterName: "${CLUSTER}"
          network: "${CLUSTER_NETWORK}"
    EOF
    
  2. 安裝 Istio。

    $ istioctl install -f vm-cluster.yaml
    
  3. 部署東西向閘道

    壓縮
    $ @samples/multicluster/gen-eastwest-gateway.sh@ --single-cluster | istioctl install -y -f -
    
  4. 透過東西向閘道公開叢集內的服務

    公開控制平面

    壓縮
    $ kubectl apply -n istio-system -f @samples/multicluster/expose-istiod.yaml@
    

設定 VM 命名空間

  1. 建立將託管虛擬機器的命名空間

    $ kubectl create namespace "${VM_NAMESPACE}"
    
  2. 為虛擬機器建立服務帳戶

    $ kubectl create serviceaccount "${SERVICE_ACCOUNT}" -n "${VM_NAMESPACE}"
    

建立要傳輸到虛擬機器的檔案

首先,為虛擬機器建立範本 WorkloadGroup

$ cat <<EOF > workloadgroup.yaml
apiVersion: networking.istio.io/v1
kind: WorkloadGroup
metadata:
  name: "${VM_APP}"
  namespace: "${VM_NAMESPACE}"
spec:
  metadata:
    labels:
      app: "${VM_APP}"
  template:
    serviceAccount: "${SERVICE_ACCOUNT}"
    network: "${VM_NETWORK}"
EOF

接下來,使用 istioctl x workload entry 命令來產生

  • cluster.env:包含用於識別命名空間、服務帳戶、網路 CIDR 和(選擇性地)要捕獲的輸入連接埠的中繼資料。
  • istio-token:用於從 CA 取得憑證的 Kubernetes 權杖。
  • mesh.yaml:提供 ProxyConfig 來設定 discoveryAddress、健康檢查探測和一些驗證選項。
  • root-cert.pem:用於驗證的根憑證。
  • hosts/etc/hosts 的附錄,代理將使用它來連線 istiod 以取得 xDS。
$ istioctl x workload entry configure -f workloadgroup.yaml -o "${WORK_DIR}" --clusterID "${CLUSTER}"

設定虛擬機器

在您要新增至 Istio 網格的虛擬機器上執行下列命令

  1. 安全地將檔案從 "${WORK_DIR}" 傳輸到虛擬機器。您選擇安全傳輸這些檔案的方式應考量您的資訊安全原則。為了方便本指南,將所有必要的檔案傳輸到虛擬機器中的 "${HOME}"

  2. 將根憑證安裝在 /etc/certs

    $ sudo mkdir -p /etc/certs
    $ sudo cp "${HOME}"/root-cert.pem /etc/certs/root-cert.pem
    
  3. 將權杖安裝在 /var/run/secrets/tokens

    $ sudo  mkdir -p /var/run/secrets/tokens
    $ sudo cp "${HOME}"/istio-token /var/run/secrets/tokens/istio-token
    
  4. 安裝包含 Istio 虛擬機器整合執行階段的套件

    $ curl -LO https://storage.googleapis.com/istio-release/releases/1.24.0/deb/istio-sidecar.deb
    $ sudo dpkg -i istio-sidecar.deb
    
  5. cluster.env 安裝在目錄 /var/lib/istio/envoy/

    $ sudo cp "${HOME}"/cluster.env /var/lib/istio/envoy/cluster.env
    
  6. 網格組態安裝到 /etc/istio/config/mesh

    $ sudo cp "${HOME}"/mesh.yaml /etc/istio/config/mesh
    
  7. 將 istiod 主機新增至 /etc/hosts

    $ sudo sh -c 'cat $(eval echo ~$SUDO_USER)/hosts >> /etc/hosts'
    
  8. /etc/certs//var/lib/istio/envoy/ 中檔案的所有權轉移給 Istio 代理

    $ 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

  1. 啟動 Istio 代理程式

    $ sudo systemctl start istio
    

驗證 Istio 是否成功運作

  1. 檢查 /var/log/istio/istio.log 中的記錄。您應該會看到類似下列的項目

    $ 2020-08-21T01:32:17.748413Z info sds resource:default pushed key/cert pair to proxy
    $ 2020-08-21T01:32:20.270073Z info sds resource:ROOTCA new connection
    $ 2020-08-21T01:32:20.270142Z info sds Skipping waiting for gateway secret
    $ 2020-08-21T01:32:20.270279Z info cache adding watcher for file ./etc/certs/root-cert.pem
    $ 2020-08-21T01:32:20.270347Z info cache GenerateSecret from file ROOTCA
    $ 2020-08-21T01:32:20.270494Z info sds resource:ROOTCA pushed root cert to proxy
    $ 2020-08-21T01:32:20.270734Z info sds resource:default new connection
    $ 2020-08-21T01:32:20.270763Z info sds Skipping waiting for gateway secret
    $ 2020-08-21T01:32:20.695478Z info cache GenerateSecret default
    $ 2020-08-21T01:32:20.695595Z info sds resource:default pushed key/cert pair to proxy
    
  2. 建立命名空間以部署基於 Pod 的服務

    $ kubectl create namespace sample
    $ kubectl label namespace sample istio-injection=enabled
    
  3. 部署 HelloWorld 服務

    壓縮
    $ kubectl apply -n sample -f @samples/helloworld/helloworld.yaml@
    
  4. 從您的虛擬機器將請求傳送到服務

    $ curl helloworld.sample.svc:5000/hello
    Hello version: v1, instance: helloworld-v1-578dd69f69-fxwwk
    

後續步驟

有關虛擬機器的更多資訊

解除安裝

停止虛擬機器上的 Istio

$ sudo systemctl stop istio

然後,移除 Istio 邊車套件

$ sudo dpkg -r istio-sidecar
$ dpkg -s istio-sidecar

若要解除安裝 Istio,請執行下列命令

壓縮
$ kubectl delete -n istio-system -f @samples/multicluster/expose-istiod.yaml@
$ istioctl uninstall -y --purge

控制平面命名空間(例如,istio-system)預設不會移除。如果不再需要,請使用下列命令將其移除

$ kubectl delete namespace istio-system
此資訊是否有用?
您有任何改進建議嗎?

感謝您的意見反應!