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

现在我们可以创建一个 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
$ 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

经验总结扩展阅读