【发布时间】:2019-12-03 16:49:22
【问题描述】:
我使用 Azure Kubernetes 托管几个不同的服务。
我正在尝试通过外部 IP 配置 UDP 负载平衡。 我创建了 LoadBalancer、UDP 协议和 sessionAffinity 类型的服务。我的部署还配置了 HTTP RedinessProbe。
如果 UDP 客户端从 kubernetes 网络访问我的服务,一切正常: - 客户端对处于就绪状态的具体 pod 有粘性会话。 - 如果已经分配的 pod 已死,客户端重新平衡到另一个准备好的 pod; - 在 sessionAffinityConfig.clientIP.timeoutSeconds 过后,客户端重新平衡(即下一个数据包可能会被路由到其他准备好的 pod)。
如果我尝试从外部连接到 LoadBalancer(使用外部 IP),想法会有所不同: - 客户端对处于就绪状态的具体 pod 有粘性会话。 - 如果先前已死,客户端不会获得新的就绪 pod。仅当客户端在 sessionAffinityConfig.clientIP.timeoutSeconds 时间段内停止发送消息时才连接到新的 Pod。
为了解决这个问题,我尝试使用 ingress-nginx。我找到了关于这种配置的有用文章here 。
但在我完成 udp-service 配置并添加 UDP 端口后,我收到以下错误:
无法使用混合协议创建外部负载平衡器
能否请您指出如何在 Kubernetes 中正确执行此操作。
udp-services 配置图:
kind: ConfigMap
apiVersion: v1
metadata:
name: udp-services
namespace: ingress-nginx
labels:
app.kubernetes.io/name: ingress-nginx
app.kubernetes.io/part-of: ingress-nginx
data:
5684: "dev/dip-dc:5684"
ingress-nginx 控制器服务 YAML:
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
【问题讨论】:
标签: kubernetes udp kubernetes-ingress nginx-ingress