入口无法获取默认的http后端 [英] ingress can not get the default http backend

查看:19
本文介绍了入口无法获取默认的http后端的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我配置为与控制器一起运行的入口-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>)

我已经成功安装了inress-nginx,所有的Pod都工作正常。

推荐答案

您在Ingress规则和Service中定义的serviceName应该相同。

这样:

...
  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位于不同的命名空间,您还可以将服务名称添加到入口规则中。在这种情况下,您需要对服务<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

这篇关于入口无法获取默认的http后端的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆