让nginx-ingress在Azure中使用UDP



目前此设置适用于TCP,但是一旦切换到UDP,我就会收到错误

The Service "nginx-ingress-controller" is invalid: spec.ports: Invalid value:
[]core.ServicePort{core.ServicePort{Name:"proxied-udp-30001", Protocol:"UDP",
Port:30001, TargetPort:intstr.IntOrString{Type:0, IntVal:30001, StrVal:""}, 
NodePort:0}, core.ServicePort{Name:"proxied-udp-30002", Protocol:"UDP", 
Port:30002, TargetPort:intstr.IntOrString{Type:0, IntVal:30002, StrVal:""}, 
NodePort:0}, core.ServicePort{Name:"http", Protocol:"TCP", Port:80, 
TargetPort:intstr.IntOrString{Type:1, IntVal:0, StrVal:"http"}, NodePort:32724},
core.ServicePort{Name:"https", Protocol:"TCP", Port:443, 
TargetPort:intstr.IntOrString{Type:1, IntVal:0, StrVal:"https"}, 
NodePort:30127}}: cannot create an external load balancer with mix protocols

就在我尝试应用补丁之后

kubectl patch deployment nginx-ingress-controller -n ingress-nginx --patch $(Get-Content .k8sprod-azure-multi-pod-nodenginx-ingress-controller-deploy-patch.yaml -Raw)
kubectl patch svc nginx-ingress-controller -n ingress-nginx --patch $(Get-Content .k8sprod-azure-multi-pod-nodenginx-ingress-controller-svc-patch.yaml -Raw)

这些文件中的每一个在哪里

nginx-ingress-controller-svc-patch.yaml

apiVersion: v1
kind: Service
metadata:
annotations:
meta.helm.sh/release-name: nginx-ingress
meta.helm.sh/release-namespace: ingress-nginx
name: nginx-ingress-controller
namespace: ingress-nginx
selfLink: /api/v1/namespaces/ingress-nginx/services/nginx-ingress-controller
spec:
ports:
- name: proxied-udp-30001
port: 30001
targetPort: 30001
protocol: UDP
- name: proxied-udp-30002
port: 30002
targetPort: 30002
protocol: UDP

和nginx-ingress-controller-deploy-patch.yaml

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: nginx-ingress-controller
namespace: ingress-nginx
selfLink: /apis/extensions/v1beta1/namespaces/ingress-nginx/deployments/nginx-ingress-controller
spec:
template:
spec:
hostNetwork: true # Edit added via tutorial https://skryvets.com/blog/2019/04/09/exposing-tcp-and-udp-services-via-ingress-on-minikube/
containers:
- args:
- /nginx-ingress-controller
- --default-backend-service=ingress-nginx/nginx-ingress-default-backend
- --election-id=ingress-controller-leader
- --ingress-class=nginx
- --udp-services-configmap=default/udp-services # Needed for udp config map usage
- --configmap=ingress-nginx/nginx-ingress-controller
name: nginx-ingress-controller

服务看起来像这样

apiVersion: v1
kind: Service
metadata:
name: game-svc-1
namespace: default
spec:
selector:
instance: game-1
# type: NodePort
type: ClusterIP
ports:
- protocol: UDP
port: 9001 # exposed port
targetPort: 19132

和 Udp 配置文件

apiVersion: v1
kind: ConfigMap
metadata:
name: udp-services
namespace: default
data:
30001: "default/game-svc-1:9001"
30002: "default/game-svc-2:9002"

就像我说的那样,这在使用 tcp 时工作得很好,但是一旦我切换到 UDP,就会弹出错误,我是否缺少 UDP 步骤?

编辑>添加微软所述的 helm 命令以使用此命令

helm install nginx-ingress stable/nginx-ingress --namespace ingress-nginx --set controller.replicaCount=2 --set controller.nodeSelector."beta.kubernetes.io/os"=linux --set defaultBackend.nodeSelector."beta.kubernetes.io/os"=linux --set controller.service.httpPort.enable=false --set controller.service.httpsPort.enable=false

基于以下错误:

The Service "nginx-ingress-controller" is invalid: spec.ports: Invalid value:
[]core.ServicePort
{core.ServicePort{Name:"proxied-udp-30001", Protocol:"UDP", Port:30001, TargetPort:intstr.IntOrString {Type:0, IntVal:30001, StrVal:""}, NodePort:0}, 
core.ServicePort{Name:"proxied-udp-30002", Protocol:"UDP", 
Port:30002, TargetPort:intstr.IntOrString{Type:0, IntVal:30002, StrVal:""}, 
NodePort:0}, 
core.ServicePort{Name:"http", Protocol:"TCP", Port:80, 
TargetPort:intstr.IntOrString{Type:1, IntVal:0, StrVal:"http"}, NodePort:32724},
core.ServicePort{Name:"https", Protocol:"TCP", Port:443, 
TargetPort:intstr.IntOrString{Type:1, IntVal:0, StrVal:"https"}, 
NodePort:30127}}:

错误确切地告诉您,您正在尝试使用 PORT 类型的混合匹配来更新服务。

cannot create an external load balancer with mix protocols

这是因为 PATCH 命令将使用添加的配置来扩充现有服务。(在您的情况下,2 个新的公开 UDP 端口(位于现有配置(2 个 TCP 端口(之上

从TCP转换为UDP的最佳方法是重用名称端口名称(httphttps(,这将允许PATCH命令将字典条目合并在一起,替换TCP并将80/443与UDP端口设置合并。

如果实际上正在考虑同时支持 UDP/TCP,则需要将 ServiceType 更改为ClusterIP,因为LoadBalancer类型不支持单个公共 IP(Azure 负载均衡器前端 IP(的协议不匹配

查看错误,看起来补丁无法正确合并清单文件,因为很明显,错误中提到了TCP端口,而清单文件共享中缺少该端口。 您可以尝试直接应用清单文件而不是使用补丁吗?

相关内容

  • 没有找到相关文章

最新更新