虚拟机部署
先决条件
虚拟机两台
第一台作为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.01.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?