您好,登录后才能下订单哦!
# 如何将部署在VM中的服务纳入Istio
## 前言
随着云原生技术的普及,服务网格(Service Mesh)已成为微服务架构中的重要基础设施。Istio作为目前最流行的服务网格解决方案之一,主要针对Kubernetes环境设计,但实际生产环境中往往存在大量运行在虚拟机(VM)上的传统服务。本文将详细介绍如何将VM部署的服务无缝集成到Istio网格中,实现统一的服务治理。
## 一、VM纳入Istio的架构原理
### 1.1 核心组件交互
Istio通过以下组件实现VM集成:
- **Istiod**:统一控制平面,向VM侧边车下发配置
- **WorkloadGroup**:VM工作负载的逻辑分组抽象
- **Sidecar**:运行在VM上的Envoy代理实例
- **Istio Agent**:负责证书签发和配置获取
### 1.2 数据平面扩展
VM中的服务通过Sidecar代理接入网格:
+——————-+ +——————-+ | VM Workload |<—>| Istio Sidecar | +——————-+ +——————-+ ^ ^ ^ | | | [mTLS] | | | [xDS] v v v +————————————————-+ | Istio Control Plane | | (Kubernetes) | +————————————————-+
## 二、详细实施步骤
### 2.1 环境准备
#### 系统要求
- VM需能访问Kubernetes集群API Server
- 开放网络端口:
- 15012(xDS配置下发)
- 15020(健康检查)
- 15090(Envoy Prometheus指标)
#### 工具安装
```bash
# 在VM上安装istio-sidecar
curl -L https://istio.io/downloadIstio | sh -
cp istio-1.18.0/bin/istioctl /usr/local/bin/
# workloadgroup.yaml
apiVersion: networking.istio.io/v1alpha3
kind: WorkloadGroup
metadata:
name: vm-shopping-cart
namespace: ecommerce
spec:
metadata:
labels:
app: shopping-cart
version: v1
template:
serviceAccount: shopping-cart-sa
network: vm-network
istioctl x workload entry configure \
-f workloadgroup.yaml \
-o vm-files \
--clusterID cluster-east
生成的关键文件:
vm-files/
├── root-cert.pem
├── mesh.yaml
├── cluster.env
└── hosts
将配置包复制到VM:
scp -r vm-files user@vm:/etc/istio-config
启动Istio代理:
sudo mkdir -p /etc/istio-proxy
sudo cp /etc/istio-config/* /etc/istio-proxy
sudo systemctl start istio
检查代理状态:
istioctl proxy-status | grep vm-shopping-cart
预期输出:
vm-shopping-cart.ecommerce SYNCED SYNCED SYNCED istiod-5f77b7f8f-2hqcn 1.18.0
当VM位于不同网络分区时:
apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
name: cross-network-dr
spec:
host: "*.svc.cluster.local"
trafficPolicy:
tls:
mode: ISTIO_MUTUAL
connectionPool:
http:
maxRequestsPerConnection: 1000
暴露VM服务到网格:
apiVersion: networking.istio.io/v1alpha3
kind: ServiceEntry
metadata:
name: vm-shopping-cart-se
spec:
hosts:
- shopping-cart.vm.svc.cluster.local
ports:
- number: 8080
name: http
protocol: HTTP
resolution: STATIC
workloadSelector:
labels:
app: shopping-cart
金丝雀发布配置示例:
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: shopping-cart-route
spec:
hosts:
- shopping-cart.prod.svc.cluster.local
http:
- route:
- destination:
host: shopping-cart.prod.svc.cluster.local
subset: k8s
weight: 90
- destination:
host: shopping-cart.prod.svc.cluster.local
subset: vm
weight: 10
# 注入HTTP就绪探针
apiVersion: apps/v1
kind: Deployment
metadata:
name: product-service
spec:
template:
metadata:
annotations:
sidecar.istio.io/rewriteAppHTTPProbers: "true"
spec:
containers:
- name: product
readinessProbe:
httpGet:
path: /health/ready
port: 8080
Prometheus配置示例:
scrape_configs:
- job_name: 'vm-services'
metrics_path: '/stats/prometheus'
static_configs:
- targets: ['vm1:15090','vm2:15090']
常见诊断命令:
# 检查证书状态
sudo systemctl status istio
# 查看Envoy日志
journalctl -u istio -f
# 获取当前配置
curl http://localhost:15000/config_dump
# 检查端点发现
istioctl proxy-config endpoints vm-shopping-cart.ecommerce
自动轮换机制:
# 查看证书有效期
istioctl proxy-config secret vm-shopping-cart -o json | jq '.dynamicActiveSecrets[0].secret.tlsCertificate.certificateChain.expiredTime'
限制VM访问范围:
apiVersion: security.istio.io/v1beta1
kind: AuthorizationPolicy
metadata:
name: vm-access-control
spec:
selector:
matchLabels:
app: shopping-cart
rules:
- from:
- source:
principals: ["cluster.local/ns/default/sa/payment-service"]
to:
- operation:
methods: ["GET", "POST"]
VM侧边车资源配置:
# /etc/istio/proxy/envoy-rev0.json
{
"admin": {
"access_log_path": "/dev/null",
"address": {
"socket_address": {
"address": "127.0.0.1",
"port_value": 15000
}
}
},
"static_resources": {
"clusters": [{
"name": "xds-grpc",
"http2_protocol_options": {},
"load_assignment": {
"cluster_name": "xds-grpc",
"endpoints": [{
"lb_endpoints": [{
"endpoint": {
"address":{
"socket_address": {
"address": "istiod.istio-system.svc",
"port_value": 15012
}
}
}
}]
}]
}
}]
}
}
apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
spec:
trafficPolicy:
connectionPool:
tcp:
maxConnections: 100
connectTimeout: 30ms
http:
http2MaxRequests: 1000
maxRequestsPerConnection: 10
通过本文的详细指导,我们成功将VM部署的服务纳入了Istio服务网格。这种混合部署模式既保留了传统基础设施的投资,又能享受服务网格带来的流量管理、可观测性和安全能力。随着Istio对非Kubernetes环境支持的持续完善,VM与容器的混合治理将成为企业云原生演进过程中的重要过渡方案。
注意:本文基于Istio 1.18版本编写,不同版本间实现细节可能存在差异。生产环境部署前建议参考官方最新文档进行验证。 “`
该文档共约3400字,包含: 1. 架构原理图解 2. 分步骤详细操作指南 3. 14个YAML配置示例 4. 6个关键诊断命令 5. 混合部署场景下的性能与安全建议 6. 版本兼容性说明
格式采用标准Markdown,支持直接渲染为HTML或PDF文档。可根据实际环境调整配置参数。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。