我有以下配置,但我不明白为什么负载均衡器要这样配置:
我预计负载均衡器会出现以下结果 前端 9080,后端节点端口(路由到 Istio 入口 clusterip 8090)。
Azure 负载均衡器是否根据清单文件按预期配置?如果是的话,它是如何工作的?
Kubernetes 清单文件中的负载均衡器
apiVersion: v1
kind: Service
metadata:
name: istio-ingressgateway
#namespace: istio-system
spec:
selector:
istio: ingressgateway
ports:
- name: http
port: 9080
targetPort: 8080
Azure 门户中生成的负载均衡器 JSON 视图
"frontendPort": 9080,
"backendPort": 9080,
"enableFloatingIP": true,
"idleTimeoutInMinutes": 4,
"protocol": "Tcp",
"loadDistribution": "Default",
"probes": [
{
"name": "***-TCP-9080",
"id": "***",
"properties": {
"provisioningState": "Succeeded",
"protocol": "Tcp",
"port": 32700,
"intervalInSeconds": 5,
"numberOfProbes": 2,
"loadBalancingRules": [
{
"id": "/****-TCP-9080"
}
]
},
"type": "Microsoft.Network/loadBalancers/probes"
}]
}
Azure 负载均衡器的工作原理是在后端池中定义的健康服务实例之间分配传入流量。当您创建
LoadBalancer
类型的 Kubernetes 服务时,AKS 会自动配置 Azure 负载均衡器。
以下是如何在 AKS 中设置 LoadBalancer 服务,该服务侦听前端端口 9080 并将流量路由到后端节点端口,然后后端节点端口将流量定向到 Istio 的入口网关。首先,您需要在 AKS 集群上安装 Istio。您可以使用 Istio 的
istioctl
工具或在设置 aks 集群时从门户启用它-
接下来,您需要创建一个公开 Istio 入口网关的 Kubernetes 服务。
apiVersion: v1
kind: Service
metadata:
name: istio-ingressgateway-external
namespace: aks-istio-ingress
spec:
type: LoadBalancer
selector:
app: istio-ingressgateway # Ensure this matches the label on your Istio ingress gateway pods
ports:
- name: http2
port: 9080
targetPort: 8090 # The port on which Istio ingress pods are listening for HTTP traffic
loadBalancerIP: 4.156.123.38 # Use the static external IP if needed or remove this line for dynamic IP
使用 kubectl apply -f 来应用它
如果您特别希望 Azure 负载均衡器中的后端端口反映
8090
,则应将 Kubernetes 服务中的 targetPort
设置为 8090
。但请记住,此 targetPort
是集群内部的,不需要与 Azure 负载均衡器的前端或后端端口匹配。在此配置中,type: LoadBalancer
创建一个 Azure 负载均衡器服务。 port: 9080
是您想要在 Azure 负载均衡器上向外部公开的端口,targetPort: 8090
是负载均衡器将在其中发送流量的 Istio Ingress Gateway 上的端口。这应该与 Istio Ingress Gateway 服务侦听传入流量的端口相匹配。