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


4.2 在 Kubernetes 集群上安裝 Istio讓我們下載 Istio 1.10.3 。
$ curl -L https://istio.io/downloadIstio | ISTIO_VERSION=1.10.3 sh -下載了 Istio 后,我們可以使用 IstioOperator 來安裝它,它可以設置網格 ID、集群名稱和網絡名稱 。網絡名稱將是空的 , 因為我們要用單一網絡架構 。
讓我們來設置幾個環境變量,我們將在本實驗中使用這些變量 。
export SERVICE_ACCOUNT="vm-sa" export VM_APP="hello-vm" export VM_NAMESPACE="vm-namespace" export WORK_DIR="${HOME}/vmfiles" export CLUSTER_NETWORK="" export VM_NETWORK="" export CLUSTER="Kubernetes"我們還可以創建 $WORK_DIR , 在這里我們將存儲證書和其他我們必須復制到虛擬機上的文件 。
mkdir -p $WORK_DIR接下來,我們將初始化 Istio Operator 并安裝 Istio:
getmesh istioctl operator init一旦 Operator 被初始化 , 我們就可以創建 IstioOperator 資源,指定網格 ID、集群名稱和網絡,并安裝 Istio:
cat <<EOF | kubectl apply -f - apiVersion: install.istio.io/v1alpha1 kind: IstioOperator metadata:name: istionamespace: istio-system spec:values:global:meshID: mesh1multiCluster:clusterName: "${CLUSTER}"network: "${CLUSTER_NETWORK}" EOF我們可以使用 kubectl get iop -n istio-system 命令來檢查 Istio 安裝狀態何時變為健康 。
在下一步,我們將安裝東西向網關 。這是控制平面用來與虛擬機工作負載對話的網關,反之亦然 。
gen-eastwest-gateway.sh 腳本是我們之前下載的 Istio 包的一部分 。將文件夾改為 istio-1.10.3(或你解壓 Istio 的文件夾)并運行以下命令:
samples/multicluster/gen-eastwest-gateway.sh --single-cluster | istioctl install -y -f -gen-eastwest-gateway.sh 腳本使用一個 IstioOperator 來部署一個額外的網關,名為 istio-eastwestgateway,并配置了服務端口 。
我們可以通過查看 istio-system 命名空間中的 Kubernetes 服務來檢查新網關 。
最后,我們還需要配置網關 , 通過它來暴露控制平面(istiod) 。我們可以通過部署 expose-istiod.yaml 文件來做到這一點:
$ kubectl apply -n istio-system -f samples/multicluster/expose-istiod.yaml gateway.networking.istio.io/istiod-gateway created virtualservice.networking.istio.io/istiod-vs created4.3 準備虛擬機命名空間和文件對于虛擬機工作負載,我們必須創建一個單獨的命名空間來存儲 WorkloadEntry 資源和任何其他虛擬機工作負載相關的資源 。此外 , 我們還必須導出集群環境文件、令牌、證書和其他我們必須轉移到虛擬機上的文件 。
我們將把所有文件存放在我們在實驗開始時創建的 $WORK_DIR 中 。
讓我們在同一命名空間中創建虛擬機命名空間和我們將用于虛擬機工作負載的服務賬戶:
$ kubectl create ns "${VM_NAMESPACE}" namespace/vm-namespace created $ kubectl create serviceaccount "${SERVICE_ACCOUNT}" -n "${VM_NAMESPACE}" serviceaccount/vm-sa created現在我們可以創建一個 WorkloadGroup 資源并將其保存到 workloadgroup.yaml 中:
cat <<EOF > workloadgroup.yaml apiVersion: networking.istio.io/v1alpha3 kind: WorkloadGroup metadata:name: "${VM_APP}"namespace: "${VM_NAMESPACE}" spec:metadata:labels:app: "${VM_APP}"template:serviceAccount: "${SERVICE_ACCOUNT}"network: "${VM_NETWORK}" EOF虛擬機需要關于集群和 Istio 的控制平面的信息來連接到它 。為了生成所需文件,我們可以運行 getmesh istioctl x workload entry 命令 。我們將所有生成的文件保存到 $WORK_DIR 中:
$ getmesh istioctl x workload entry configure -f workloadgroup.yaml -o "${WORK_DIR}" --clusterID "${CLUSTER}" Warning: a security token for namespace "vm-namespace" and service account "vm-sa" has been generated and stored at "/vmfiles/istio-token" configuration generation into directory /vmfiles was successful4.4 配置虛擬機現在是時候創建和配置一個虛擬機了 。我在 GCP 中運行這個虛擬機,就像 Kubernetes 集群一樣 。虛擬機使用的是 Debian GNU/Linux 10(Buster)鏡像 。確保你在防火墻部分勾選了 "允許 HTTP 流量",并且你有 SSH 訪問該實例的權限 。
在這個例子中,我們在 80 端口運行一個簡單的 Python HTTP 服務器 。你可以在不同的端口上配置任何其他服務 。只要確保你配置了相應的安全和防火墻規則 。

  1. $WORK_DIR 中的文件復制到實例的主文件夾中 。相應地替換 USERNAMEINSTANCE_IP

    推薦閱讀