![](/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.