入口无法获取默认的http后端

问题描述

我配置为与控制器ingress-Nginx一起运行的入口。

Animal a = h

我可以在本地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 上运行api,但是不能远程运行。

curl localIP:3000/testapi

我已经成功安装了ingress-Nginx,所有pod均正常运行。

解决方法

您在serviceName规则中定义的IngressService应该相同。

赞:

...
  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
,

入口控制器发现服务Endpoints的方式是,它使用创建入口资源的名称空间中入口资源中提供的serviceName搜索kubernetes服务。如果没有serviceName的kubernetes服务,您将得到endpoints not found

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

因此,在您的情况下,要么不存在kubernetes服务,要么它的名称空间与创建入口资源的位置不同。

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

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

仔细检查您安装了哪种nginx入口控制器