使用NGINX入口在EKS上公开服务以及负载平衡器问题



我正在尝试建立一个服务,并在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域上的域app.mydomain.com指向入口外部地址。还有一个证书管理器服务正在运行,以便支持HTTPS。

然而,虽然基本上相同的设置在GKE上完全开箱即用,但EKS让我很难过。

据我所知,与谷歌的第7层相比,EKS默认LoadBalancer是第4层(这解释了HTTPS不起作用(,但域重定向也存在问题,因为它只是解析为入口地址,而不是我想要的地址,因此我的应用程序不会出现。

该域是通过Google Domains注册的,我正在创建合成记录(用于我的子域(,该记录指向我在EKS上的入口外部地址。同样的方案在GKE上运行得很好,但在这里它将地址解析为入口地址,而不是我的域,这导致入口侧出现404。

我想知道是否有人能告诉我如何正确设置它?我应该放弃在EKS上的nginx入口,转而使用ALB吗?以及如何正确关联域?

提前非常感谢!


编辑:

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

你在nginxingress控制器的日志中看到错误了吗?+kubectl events对调试都很有用。

我会在任何地方禁用TLS,让你的服务在http上运行,然后逐步在ingress控制器上启用TLS。

编辑:根据您的回复,

curl -H "Host: app.mydomain.com" http://<elb-address>:80 

应该在入口后面呼叫您的服务。

app.mydomain.com是如何定义的?它是dns条目的CNAME吗?

最新更新