我使用Azure Kubernetes托管几个不同的服务。
我正在尝试通过外部IP配置UDP负载平衡。 我创建了类型为LoadBalancer,UDP协议和sessionAffinity的服务。另外,我的部署中还配置了HTTP RedinessProbe。
如果UDP客户端从kubernetes网络访问我的服务,则一切正常: -客户在准备好的状态下对混凝土吊舱进行粘性会话。 -如果已经分配的Pod已死,则客户端重新平衡到另一个就绪Pod; -客户端在 sessionAffinityConfig.clientIP.timeoutSeconds 经过之后重新平衡(即下一个数据包可能被路由到其他就绪的Pod)。
如果我尝试从外部连接到LoadBalancer(使用外部IP),则想法会有所不同: -客户在准备好的状态下对混凝土吊舱进行粘性会话。 -如果先前已死,则客户端不会获得新的就绪Pod。仅在客户端在 sessionAffinityConfig.clientIP.timeoutSeconds 时间段内停止发送邮件的情况下,它才连接到新的Pod。
因此,为了解决该问题,我尝试使用ingress-nginx。我发现了有关这种配置的有用的文章here 。
但是在完成udp服务配置并添加UDP端口后,出现以下错误:
无法使用混合协议创建外部负载均衡器
能否请您指出如何在Kubernetes中正确执行操作。
udp-services配置图:
kind: Service
apiVersion: v1
metadata:
name: ingress-nginx2
namespace: ingress-nginx
labels:
app.kubernetes.io/name: ingress-nginx
app.kubernetes.io/part-of: ingress-nginx
spec:
externalTrafficPolicy: Local
type: LoadBalancer
selector:
app.kubernetes.io/name: ingress-nginx
app.kubernetes.io/part-of: ingress-nginx
ports:
- name: http
port: 80
targetPort: http
- name: https
port: 443
targetPort: https
- name: upd
port: 5684
targetPort: udp
ingress-nginx控制器服务YAML:
{{1}}
答案 0 :(得分:0)
不幸的是,许多K8S提供程序不支持多协议LB服务。
查看此tutorial,它向您展示如何构建自己的UDP / TCP负载均衡器。
您需要做的摘要是: