无法在Ingress-nginx-controller上配置UDP

时间:2019-07-25 11:57:18

标签: kubernetes udp kubernetes-ingress nginx-ingress

我使用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}}

1 个答案:

答案 0 :(得分:0)

不幸的是,许多K8S提供程序不支持多协议LB服务。

查看此tutorial,它向您展示如何构建自己的UDP / TCP负载均衡器。

您需要做的摘要是:

  1. 为您的应用程序创建NodePort服务
  2. 创建一个小型服务器实例,并使用LB配置运行Nginx