[英]nginx-ingress controller for Azure Kubernetes Service 502 Bad Gateway
[英]Getting nginx-ingress to use UDP in Azure
目前此设置适用于 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 .\k8s\prod-azure-multi-pod-node\nginx-ingress-controller-deploy-patch.yaml -Raw)
kubectl patch svc nginx-ingress-controller -n ingress-nginx --patch $(Get-Content .\k8s\prod-azure-multi-pod-node\nginx-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 命令,如 microsoft 所述以使用此命令
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 TCP 端口)之上使用添加的配置来扩充现有服务。(在您的情况下,2 个新暴露的 UDP 端口)
The best way to convert from TCP to UDP would be to reuse the name port names ( http
and https
) this will allow the PATCH command to merge the dictionary entries together, replacing the TCP and pour 80/443 with your UDP port settings.
如果您实际上正在考虑同时支持 UDP/TCP,则需要将 ServiceType 更改为ClusterIP
,因为LoadBalancer
类型不支持单个公共 IP(Azure LoadBalancer 前端 IP)的协议不匹配
查看错误,看起来补丁无法正确合并清单文件,因为这从 TCP 端口被错误提及,而共享清单文件中缺少该端口。 您可以尝试直接应用清单文件而不是使用补丁吗?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.