![](/img/trans.png)
[英]Network Load Balancer with the NGINX Ingress Controller on Amazon EKS always returns a 503 error
[英]Exposing a service on EKS using NGINX ingress and issues with load balancer
我正在尝试设置一项服务并在 EKS 上对外公开它。 我已经在 GKE 上轻松完成了,但现在 AWS 给我带来了困难。
我的 NGINX yaml 看起来像这样:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: myapp-ingress
annotations:
kubernetes.io/ingress.class: "nginx"
cert-manager.io/cluster-issuer: "letsencrypt-prod"
spec:
tls:
- hosts:
- app.mydomain.com
secretName: myapp-tls
rules:
- host: app.mydomain.com
http:
paths:
- path: /
backend:
serviceName: myapp-service
servicePort: 80
然后我在 Google Domains app.mydomain.com
我的域app.mydomain.com
指向入口外部地址。 还有一个 cert-manager 服务正在运行以支持 HTTPS。
然而,虽然基本上相同的设置在 GKE 上完全开箱即用,但 EKS 给我带来了困难。
据我所知,与 Google 的第 7 层相比,它与 EKS 默认的 LoadBalancer 是第 4 层有关(这解释了 HTTPS 不起作用),但域的重定向也存在问题,因为它只是解析为入口地址而不是我的所需的地址,因此我的应用程序没有出现。
该域是通过 Google Domains 注册的,我正在创建指向我在 EKS 上的入口外部地址的合成记录(用于我的子域)。 相同的方案在 GKE 上工作得非常好,但在这里它将地址解析为入口地址而不是我的域,这导致入口端出现 404。
我想知道是否有人可以指点我如何正确设置它? 我是否应该放弃 EKS 上的 nginx 入口并转向 ALB? 以及如何正确关联域?
非常感谢您提前!
kubectl describe ingress myapp-ingress
输出kubectl describe ingress myapp-ingress
:
Name: myapp-ingress
Namespace: default
Address: ********************************-****************.elb.eu-west-1.amazonaws.com
Default backend: default-http-backend:80 (<error: endpoints "default-http-backend" not found>)
TLS:
myapp-tls terminates app.mydomain.com
Rules:
Host Path Backends
---- ---- --------
app.mydomain.com
/ myapp-service:80 (172.31.2.238:8000)
Annotations: cert-manager.io/cluster-issuer: myapp-letsencrypt-prod
kubernetes.io/ingress.class: nginx
Events: <none>
我是否应该放弃 EKS 上的 nginx 入口并转向 ALB
不会。NGinX 入口控制器在 EKS 上运行良好。 可以将它们配置为第 4 层或第 7 层; 我们在第 7 层模式下使用它。
你能用输出更新你的问题吗
kubectl get ingress myapp-ingress
我认为您的入口路径也不正确。 除非我弄错了,那只是路由应用程序的根目录,而不是所有 uri。 我们使用方案
spec:
rules:
- host: service.d.tld
http:
paths:
- path: /?(.*) # <---
backend:
serviceName: my-service
servicePort: http
您是否在 nginx 入口控制器的日志中看到错误? That + kubectl events
都可用于调试目的。
我会在任何地方禁用 TLS 并让您的服务在 http 上运行,然后逐步在入口控制器上启用 TLS。
编辑:根据您上面的回复,
curl -H "Host: app.mydomain.com" http://<elb-address>:80
应该在入口后面调用您的服务。
app.mydomain.com 是如何定义的? 它是 dns 条目的 CNAME 吗?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.