ingress无法获取默认的http后端



ingress I配置与控制器ingress nginx一起运行。

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: app-ingress
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /$2
spec:
tls:
- hosts:
- XXX.XX.com
secretName: app-tls
rules:
- host: XXX.XX.com
http:
paths:
- path: /my-api(/|$)(.*)
backend:
serviceName: app
servicePort: 80
---
apiVersion: v1
kind: Service
metadata:
name: my-api
spec:
selector:
app: my-api
ports:
- name: app
port: 3000
targetPort: 3000

我可以在本地运行apicurl localIP:3000/testapi,但它不能远程运行。

# kubectl describe ingress app-ingress
Name:             app-ingress
Namespace:        default
Address:          XX.XX.XX.XX
Default backend:  default-http-backend:80 (<error: endpoints "default-http-backend" not found>)
TLS:
app-tls terminates www.daichenchen.cn
Rules:
Host                Path  Backends
----                ----  --------
XXX.XX.com
/my-api(/|$)(.*)   app:80 (<error: endpoints "app" not found>)

我已经成功安装了ingress nginx,所有的pod都能正常工作。

您在Ingress规则中定义的serviceNameService应该相同。

像这样:

...
rules:
- host: XXX.XX.com
http:
paths:
- path: /my-api(/|$)(.*)
backend:
serviceName: app
servicePort: 80
apiVersion: v1
kind: Service
metadata:
name: app
spec:
selector:
app: my-api
ports:
- name: app
port: 3000
targetPort: 3000

如果IngressService在不同的命名空间中,您也可以将服务名称添加到ingress规则中。在这种情况下,您需要使用服务<service-name>.<namespace>的dns名称。

例如:

rules:
- host: example.com
http:
paths:
- path: /my-api
backend:
serviceName: test-service.test-namespace
servicePort: 80
apiVersion: v1
kind: Service
metadata:
name: test-service
namespace: test-namespace

ingress控制器查找服务的Endpoints的方法是在创建ingress资源的命名空间中搜索具有ingress资源中提供的serviceName的kubernetes服务。如果没有找到带有serviceName的kubernetes服务,则获得endpoints not found

该服务的Endpoints包含kubernetes服务后面的pod的IP。

因此,在您的情况下,要么kubernetes服务不存在,要么它位于与创建ingress资源不同的命名空间中。

nginx入口控制器的某些变体不支持默认后端,因此它应该具有error: endpoints "default-http-backend" not found

nginxingress控制器的另一个变体支持默认后端。

仔细检查您安装了的nginx入口控制器的哪个变体

相关内容

  • 没有找到相关文章

最新更新