虚拟机部署

先决条件

  • 虚拟机两台

第一台作为k8s 部署istio,第二台作为vm,系统为centos8,centos 7要升级glibc 麻烦的很,第二台通过静态路由访问 k8s内部的pod,

本环境:

vm1: 192.168.8.131
vm1上k8s pod cird: 10.201.0.0/24
vm2: 192.168.8.170
vm2添加静态路由:
route add -net 10.201.0.0 gw 192.168.8.131 netmask 255.255.255.0
  • 1.16以上k8s

  • k8s apiserver 开启服务账户卷投影

    - --service-account-api-audiences=api,istio-ca
    - --service-account-issuer=kubernetes.default.svc
    - --service-account-signing-key-file=/etc/kubernetes/pki/sa.key
  • 设置环境变量VM_APP,WORK_DIR,VM_NAMESPACE,和SERVICE_ACCOUNT

#VM_APP: 该虚拟机将运行的服务名称
#VM_NAMESPACE: 服务命名空间名称
#WORK_DIR:工作目录
#SERVICE_ACCOUNT 用于该虚拟机的k8s serviceaccount名称
cat vm.env
export VM_APP=test
export VM_NAMESPACE=test
export WORK_DIR=./test
export SERVICE_ACCOUNT=test

. vm.env
  • 创建工作目录

安装Istio控制面板

  • 安装Istio。

在部署的时间有些问题,pod的pilot-agent不能正常的识别ISTIO_META_DNS_CAPTURE导致没有开启dns解析,感觉是字符拼接的问题,也可能是姿势不对

手动导出 istioctl manifest generate --set profile=demo --set meshConfig.defaultConfig.proxyMetadata.ISTIO_META_DNS_CAPTURE=\'true\' > config.yaml 然后修改 ISTIO_META_DNS_CAPTURE: "true"

  • 部署东西向网关

在本示例中将直接将虚拟机连接pod IP不需要部署

  • 使用提供的示例配置暴露控制平面

配置虚拟机名称空间

  • 创建将托管虚拟机的名称空间:

  • 为虚拟机创建一个服务帐户:

创建文件以传输到虚拟机

  • 为vm创建WorkloadGroup模板

WorkloadGroup是1.8新加的CRD,用于描述工作负载实例的集合。它提供了一个规范,工作负载实例可用于引导其代理,包括元数据和身份。它仅旨在与非k8s工作负载(例如虚拟机)一起使用,并且旨在模仿现有的用于Kubernetes工作负载的Sidecar注入和部署规范模型,以引导Istio代理。

  • 使用istioctl x workload entry命令生成虚拟机安装所需要的文件:

配置虚拟机

在要添加到Istio网格的虚拟机上运行以下命令:

  • 将workdir内容发送到虚拟机。在选择安全传输这些文件的方式时,应考虑您的信息安全策略。为了方便起见,将所有必需的文件传输到虚拟机中"${HOME}"目录。

  • 在以下位置安装根证书/etc/certs:

  • 在/var/run/secrets/tokens以下位置安装令牌:

  • 安装包含Istio虚拟机集成运行时的软件包:

  • 在/var/lib/istio/envoy/目录中安装cluster.env

  • 将网格配置安装到/etc/istio/config/mesh:

  • 将istiod主机添加到/etc/hosts:

这里我们没有外部lb不需要设置

查看itiod的IP并绑定host

  • 修改权限:

在虚拟机中启动Istio

启动Istio代理:

验证Istio是否成功工作

  • 检查登录/var/log/istio/istio.log。您应该看到类似于以下内容的条目:

  • 创建一个命名空间以部署基于Pod的服务:

  • 部署HelloWorld服务:

将请求从您的虚拟机发送到服务:

在k8s内部访问vm服务

创建workloadentry 和service

在vm上启动一个http server

测试

原理概述

从上面我们可以看到vm上已经可以方便的访问k8s内部的服务,首先我们开启了1.8中ISTIO_META_DNS_CAPTURE功能,实现pilot-agent实现dns解析的功能,pilot-agent监听15053 udp/tcp端口,iptables将53的dns请求重定向到pilot-agent,规则如下:

ISTIO_META_DNS_CAPTURE正常只能影响k8s上管理的pod,但是在cluster.env中,通过ISTIO_META_DNS_CAPTURE=true开启了vm上pilot-agent的该功能。

Last updated

Was this helpful?