我无法获得“多主多网络“ 和睦相处本地故障转移(或者本地负载均衡事实上)。端点注册得很好。istio-system
标有网络信息,每个节点都标有区域和地区信息,当我检查/clusters
客户端的 Envoy 管理界面上的页面时,每个端点的区域和地区信息都设置正确。
问题似乎是控制平面没有分配优先事项到端点。然而,到过时的来源,只要我创建了 DestinationRule(我有),这应该会自动工作。我还创建了一个 VirtualService 以备不时之需。
$ istioctl proxy-config endpoints -n client client-6889f68cbc-z5jb6 --cluster "outbound|80||server.server.svc.cluster.local" -o json | jq '.[0].hostStatuses[] | del(.stats)'
{
"address": {
"socketAddress": {
"address": "10.244.1.25",
"portValue": 80
}
},
"healthStatus": {
"edsHealthStatus": "HEALTHY"
},
"weight": 1,
"locality": {
"region": "region2",
"zone": "zone2"
}
}
{
"address": {
"socketAddress": {
"address": "172.18.254.1",
"portValue": 15443
}
},
"healthStatus": {
"edsHealthStatus": "HEALTHY"
},
"weight": 3,
"locality": {
"region": "region1",
"zone": "zone1"
}
}
我的设置是两个使用 KinD + metallb 在本地运行的 1.20.2 集群,使用 Istio 操作符 v1.9.1。每个集群都配置为占用不同的区域和区域。
Istio 对比和灾难恢复
apiVersion: networking.istio.io/v1beta1
kind: DestinationRule
metadata:
name: server
namespace: server
spec:
host: server
trafficPolicy:
connectionPool:
http:
http2MaxRequests: 10
maxRequestsPerConnection: 10
loadBalancer:
localityLbSetting:
enabled: true
simple: ROUND_ROBIN
outlierDetection:
baseEjectionTime: 1m
consecutive5xxErrors: 1
interval: 1s
maxEjectionPercent: 51
minHealthPercent: 0
apiVersion: networking.istio.io/v1beta1
kind: VirtualService
metadata:
name: server
namespace: server
spec:
hosts:
- server
http:
- route:
- destination:
host: server
基亚利景观酒店
从 Kiali 仪表板中可以看到,DR 和 VS 都处于活动状态。两个集群都是可路由的。但流量平等地流向两者,而流量应该只流向一个。我还尝试在 DR 规范中明确指定分发和故障转移,但没有成功。
答案1
这是 istio 1.9.1 在裸机环境中运行时的一个错误。客户端必须有一个附加服务。当提供服务时,位置信息会从第一个实例中提取。但是,当没有定义服务时,云元数据提供程序用于将位置信息分配给代理实例(sidecar 本身会查询元数据服务器)。
看: