我有这个Nginx入口控制器:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: my-ingress
annotations:
nginx.ingress.kubernetes.io/use-regex: "true"
kubernetes.io/ingress.allow-http: "true"
nginx.ingress.kubernetes.io/enable-cors: "true"
nginx.ingress.kubernetes.io/ssl-redirect: "false"
nginx.ingress.kubernetes.io/force-ssl-redirect: "false"
# Limit uploads to 8TB
nginx.ingress.kubernetes.io/proxy-body-size: 800000m
spec:
rules:
- host: myhost.info
http:
paths:
# NOTE: this one should come after all other routes. To avoid hijacking requests.
- path: /api/walrus(/|$)(.*)
backend:
serviceName: service-a
servicePort: 8080
- path: /api(/|$)(.*)
backend:
serviceName: service-b
servicePort: 8080
- path: /(.*)
backend:
serviceName: frontend
servicePort: 8080
- http:
paths:
# NOTE: this one should come after all other routes. To avoid hijacking requests.
- path: /api/walrus(/|$)(.*)
backend:
serviceName: service-a
servicePort: 8080
- path: /api(/|$)(.*)
backend:
serviceName: service-b
servicePort: 8080
- path: /(.*)
backend:
serviceName: frontend
servicePort: 8080
我重复了这些路径,只是弄清楚了。我的问题是,添加host
密钥与不添加密钥的最终结果有什么不同?
到目前为止,我一直使用它,因为如果没有它,我会将我的POST请求重定向到get请求,如以下问题所示:Kubernetes NGINX Ingress将HTTP请求从POST更改为GET
但是我还注意到,在EKS上,如果我确实添加主机,则入口只会返回所有内容的404,直到我删除它并仅使用http leavit。所以我对此有些困惑,希望有人在这里阐明正确的做事方式。
此外,对于生产环境,如何将主机正确设置为公共域以及如何设置tls证书?
关于HTTPS:https : //aws.amazon.com/blogs/opensource/network-load-balancer-nginx-ingress-controller-eks/#bGA9CAkdlMh的“定义入口资源(使用SSL终止)以将流量路由到上面创建的服务”,展示了如何在nginx-ingress处终止TLS。即使您没有使用AWS Network Load Balancer(NLB),这也可能会有所帮助。对于具有NLB的AWS,您还有另一种选择,可以在NLB处终止:https : //aws.amazon.com/blogs/aws/new-tls-termination-for-network-load-balancers/
nginx入口控制器有两个,目前尚不清楚您使用的是哪一个。该nginxinc控制器需要一个“主机”。另一个是https://github.com/kubernetes/ingress-nginx,我不确定。当您使用TLS时,nginx将SNI用于HTTPS,这似乎需要一个“主机”:http : //nginx.org/en/docs/http/configuring_https_servers.html#sni
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句