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

    推荐阅读