Istio对接虚拟机
按照官方文档配置,但是却没有成功,问题还在查询中,问题:生成的hosts文件为空,虚拟机上istio启动失败,以下是操作步骤:
大致原理:
istio通过workloadEntry和serviceEntry来关联和管理虚拟机,一个workloadEntry可以用来描述一个vm实例,serviceEntry通过workloadSelector标签来绑定workloadEntry,虚拟机启动一个实例时会自动注册,此时istio就可以访问虚拟机了。
serviceEntry的spec.host配置的主机名和virtualService和destinationRule来匹配,以进行流量管理。
虚拟机中安装istio sidecar中的DNS代理会生成k8s服务中的ip映射表,当虚拟机访问某个域名时,会先去DNS代理中查找,这样就实现了虚拟机访问集群的服务(官网配置虚拟机貌似没有使用智能代理,而是把域名文件hosts放到本地/etc/hosts文件中)
准备:一台作为k8s集群(用的阿里的容器服务,把config文件拷贝到本地操作),另一台作为需要注册的虚拟机(阿里的ECS)
集群:
1.设置环境变量
单一网格:
$ VM_APP="<将在这台虚机上运行的应用名>"
$ VM_NAMESPACE="<您的服务所在的命名空间>"
$ WORK_DIR="<证书工作目录>"
$ SERVICE_ACCOUNT="<为这台虚机提供的 Kubernetes 的服务账号名称>"
$ CLUSTER_NETWORK="" <用主集群的network>
$ VM_NETWORK=""
$ CLUSTER="Kubernetes" <用主集群的curstername>VM_APP="myvm"
VM_NAMESPACE="vmgpy"
WORK_DIR="root/myvm"
SERVICE_ACCOUNT="vm-gpy"
CLUSTER_NETWORK="8a33f7da-59e5-48ac-bb06-99b5458b168a"
VM_NETWORK=""
CLUSTER="network-8a33f7da-59e5-48ac-bb06-99b5458b168a"
2.创建工作目录
$ mkdir -p "${WORK_DIR}"
3.安装Istio
1) 配置IstioOperator
$ cat <<EOF > ./vm-cluster.yaml
apiVersion: install.istio.io/v1alpha1
kind: IstioOperator
metadata:name: istio
spec:values:global:meshID: mesh1multiCluster:clusterName: "${CLUSTER}"network: "${CLUSTER_NETWORK}"
EOF
2)执行安装
istioctl install -f vm-cluster.yaml --set values.pilot.env.PILOT_ENABLE_WORKLOAD_ENTRY_AUTOREGISTRATION=true --set values.pilot.env.PILOT_ENABLE_WORKLOAD_ENTRY_HEALTHCHECKS=true### PILOT_ENABLE_WORKLOAD_ENTRY_AUTOREGISTRATION=true:允许workloadentry自动注册
### PILOT_ENABLE_WORKLOAD_ENTRY_HEALTHCHECKS=true: 健康检查
3).安装东西向网关
samples/multicluster/gen-eastwest-gateway.sh --single-cluster | istioctl install -y -f -
4).通过东西向网关暴露istiod
kubectl apply -n istio-system -f samples/multicluster/expose-istiod.yaml
5).创建对应虚拟机的namespace和serviceaccount
kubectl create namespace "${VM_NAMESPACE}"
kubectl create serviceaccount "${SERVICE_ACCOUNT}" -n "${VM_NAMESPACE}"
6).创建WorkloadGroup资源yaml,该资源连接上虚拟机时会生成WorkloadEntry
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
7).创建WorkloadGroup资源,控制workloadentry自动注册
kubectl --namespace "${VM_NAMESPACE}" apply -f workloadgroup.yaml
8).使用WorkloadGroup资源生成cluster.env,hosts,istio-token,mesh.yaml,root-cert.pem
istioctl x workload entry configure -f workloadgroup.yaml -o "${WORK_DIR}" --clusterID "${CLUSTER}" --autoregister
4.把上述文件copy到虚拟机
##scp hosts root@虚拟机ip:虚拟机路径
scp hosts root@114.114.114.114:root
回车后需要输入虚拟机的连接密码
其他文件同样操作
5.虚拟机执行shell命令
#把生成的文件copy到对应目录
sudo mkdir -p /etc/certs
sudo mkdir -p /var/run/secrets/tokens
#文件拷贝到root路径下了
cd root
sudo cp root-cert.pem /etc/certs/root-cert.pem
sudo cp istio-token /var/run/secrets/tokens/istio-token
sudo cp cluster.env /var/lib/istio/envoy/cluster.env
sudo cp mesh.yaml /etc/istio/config/mesh
#在虚拟机上安装istio-sidecar
curl -LO https://storage.googleapis.com/istio-release/releases/1.11.2/rpm/istio-sidecar.rpm
sudo rpm -i istio-sidecar.rpm
#把hosts里的内容追加到本地hosts中
sudo sh -c 'cat hosts >> /etc/hosts'
#给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
systemctl start istio
启动失败,错误信息
[root@iZbp1dsv500o7zmhce5ujtZ ~]# tail -f /var/log/istio/istio.log
2022-07-29T02:24:56.277986Z warn ca ca request failed, starting attempt 1 in 92.310539ms
2022-07-29T02:24:56.371341Z warn ca ca request failed, starting attempt 2 in 204.921376ms
2022-07-29T02:24:56.576767Z warn ca ca request failed, starting attempt 3 in 416.397229ms
2022-07-29T02:24:56.993374Z warn ca ca request failed, starting attempt 4 in 868.636453ms
2022-07-29T02:24:57.862217Z warn sds failed to warm certificate: failed to generate workload certificate: create certificate: rpc error: code = Unavailable desc = connection error: desc = "transport: Error while dialing dial tcp: lookup istiod.istio-system.svc on 100.100.2.136:53: no such host"
2022-07-29T02:26:15.319286Z warn ca ca request failed, starting attempt 1 in 94.854681ms
2022-07-29T02:26:15.414647Z warn ca ca request failed, starting attempt 2 in 197.863245ms
2022-07-29T02:26:15.613329Z warn ca ca request failed, starting attempt 3 in 425.648865ms
2022-07-29T02:26:16.039990Z warn ca ca request failed, starting attempt 4 in 790.225062ms
2022-07-29T02:26:16.830675Z warn sds failed to warm certificate: failed to generate workload certificate: create certificate: rpc error: code = Unavailable desc = connection error: desc = "transport: Error while dialing dial tcp: lookup istiod.istio-system.svc on 100.100.2.136:53: no such host"
Istio对接虚拟机相关推荐
- Istio 对虚拟机支持史话
本文将为你介绍 Istio 历史上对虚拟机负载的支持情况,尤其是 Istio 1.8 中引入的智能 DNS 代理及 WorkloadGroup 使得虚拟机与容器在资源抽象层面可以等同视之.我将为你展现 ...
- Istio在虚拟机部署纳管
Istio诞生在kubernetes中,与kubernetes完美的融合同时又是kubernetes在微服务治理方向的补充,其基于PAAS平台基于网络的无侵入的微服务解决方案来构建Service Me ...
- Istio Pilot源码浅析
] Pilot相关代码全部在pilot包下 istio/pilot包主要负责以下几个主要职责 Pilot API server:Istio将任何底层平台的微服务信息,转换成一种规范格式,并通过Pilo ...
- 构建基于Spring Cloud向Service Mesh框架迁移的解决方案及思路
作为新一代微服务架构体系,Service Mesh 技术有效地解决了 Spring Cloud 微服务架构和服务治理过程中的痛点问题,一经推出便引起了很大的反响.近一年来,伴随着云原生的热火朝天,Se ...
- 5.计算机发展个人理解-电路终究是电路 软件如何控制硬件 代码如何操作硬件 硬件是怎么执行代码 代码如何执行 软件与硬件如何交互 计算机思维 抽象 封装 规范 屏蔽 协议分层...
计算机只是逻辑电路 除了电路还是电路 计算机就是一堆逻辑电路 他并不知道你到底想要干什么,他也不会理解什么是文件,什么是进程 通电的瞬间,就好像你打开开关,灯泡发光一样 所有的一切都是通过通电来启动的 ...
- Nacos 开源、自研、商业化三位一体战略解读
简介: Nacos作为整个阿里云原生三位战略中的核心组成部分,我们在2018年以Configserver/VIPServer/Diamond为基础通过Nacos开源输出阿里十年沉淀的注册中心和配置中心 ...
- 测试Istio 1.6 Service Mesh引入虚拟机Workload (笔记与感悟)
序: 五月底Istio官方发布了1.6的正式版, 简化了部署以及对其组件进行了整合. 引起我注意的是Istio正式增强了对非容器形态加入网格的支持, 并声明会做为重要的战略持续优化. 做为VMware ...
- k8s istio 虚拟机重启后出现upstream connect error or disconnect
错误(虚拟机重启后常见问题): upstream connect error or disconnect/reset before headers. reset reason: connection ...
- 图解Istio原理和实践--云平台技术栈18
" 如果你比较关注新兴技术的话,那么很可能在不同的地方听说过 Istio,并且知道它和 Service Mesh 有着牵扯. 导读:之前发布了云平台技术栈(ps:点击可查看),本文主要说一下 ...
- 深度剖析Service Mesh服务网格新生代Istio
作者简介:敖小剑,十五年软件开发经验,微服务专家,专注于基础架构,Cloud Native拥护者,敏捷实践者.曾在亚信.爱立信.唯品会和ppmoney任职, 现任数人云资深架构师,本文由数人云独家授权 ...
最新文章
- 区分TTL、MSL、RTT
- js实现HTML标题栏中新消息提示效果
- 如何给基于 SAP Cloud SDK 的应用增添缓存支持 Cache support
- 如何一键部署项目、代码自动更新
- 数据库部分重点内容回顾
- JavaScript中的匿名函数遇上!会怎么样
- 2020字符串的插入(C++,stringchar*)
- 深入浅出交换类排序算法(转)
- ArcGIS案例学习笔记-手动编辑擦除挖空挖除相减
- 传智播客java测试题_传智播客java笔试题
- 基于SpringBoot的社区物业管理系统(设计与实现详解)
- 2013 Esri全球用户大会QA之元数据支持
- 深度卷积神经网络(CNN)
- 研究生硕士论文开题报告中的进度和安排该怎么写?
- 不同Costa环鉴相器鉴别特性
- 苹果手机上网很慢_手机的信号满格,为什么上网速度却很慢?一招教你解除限制...
- tushare更新,get_k_data支持分时k线数据,可替代以前的get_hist_data
- 从华为P20开始的脑洞之旅:AI如何改变未来手机生活
- Java面试题 java高级
- 进程间通信之面包师问题