虚拟机安装

按照本指南部署 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}"
    

创建要传输到虚拟机的文件

首先,为 VM(s) 创建一个模板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的补充,代理将使用它来访问用于 xDS 的 istiod。*
$ 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. /var/lib/istio/envoy/目录中安装cluster.env

    $ 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
这些信息是否有用?
您是否有任何改进建议?

感谢您的反馈!