入口获得503反馈

问题描述

我想配置入口以使用我的域名。

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: app-ingress
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /$2
spec:
  tls:
  - hosts:
    - example.com
    secretName: app-tls
  rules:
  - host: example.com
    http:
      paths:
      - path: /my-api1(/|$)(.*)
        backend:
          serviceName: app1
          servicePort: 80
      - path: /my-api2
        backend:
          serviceName: app2
          servicePort: 80
---
apiVersion: v1
kind: Service
metadata:
  name: my-api
spec:
  selector:
    app: my-api
  ports:
  - name: app1
    port: 3000
    targetPort: 80
  - name: app2
    port: 4000
    targetPort: 80
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: user-api
spec:
  selector:
    matchLabels:
      app: user-api
  template:
    metadata:
      labels:
        app: user-api
    spec:
      hostNetwork: true
      dnsPolicy: ClusterFirstWithHostNet
      containers:
      - name: app1
        image: XXX
        ports:
        - name: app1
          containerPort: 3000
      - name: app2
        image: XXX
        ports:
        - name: app2
          containerPort: 4000

我可以通过serverIP:3000(例如172.16.111.211:3000/my-api1)访问app1服务。但是在远程,它总是返回503状态代码(curl https://example.com/my-api1)。

# kubectl describe ingress app-ingress
Name:             app-ingress
Namespace:        default
Address:          serverIP
Default backend:  default-http-backend:80 (<error: endpoints "default-http-backend" not found>)
TLS:
  app-tls terminates example.com
Rules:
  Host                Path  Backends
  ----                ----  --------
  example.com
                      /my-api1(/|$)(.*)   app1:80 (<error: endpoints "app1" not found>)
                      /my-api2            app2:80 (<error: endpoints "app2" not found>)

解决方法

  1. 第一件事是您的服务名称不匹配,您创建了一个名为my-api的服务,但在入口处将其称为app1和app2,这是不可用的。
  2. 第二个错误是您的部署和服务之间的选择器标签不匹配。使用标签user-api创建但在服务选择器中创建的部署被称为my-api。
  3. 如果两个应用程序都需要80端口,则必须创建两个不同的服务并在入口中引用。

以下应满足您的要求。

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

apiVersion: apps/v1
kind: Deployment
metadata:
  name: user-api
spec:
  selector:
    matchLabels:
      app: user-api
  template:
    metadata:
      labels:
        app: user-api
    spec:
      hostNetwork: true
      dnsPolicy: ClusterFirstWithHostNet
      containers:
      - name: app1
        image: XXX
        ports:
        - name: app1
          containerPort: 3000
      - name: app2
        image: XXX
        ports:
        - name: app2
          containerPort: 4000 
,

您在porttargetPort上犯了一个错误。 应该是:

apiVersion: v1
kind: Service
metadata:
  name: my-api
spec:
  selector:
    app: my-api
  ports:
  - name: app1
    port: 3000
    targetPort: 3000
  - name: app2
    port: 4000
    targetPort: 4000
---
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: app-ingress
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /$2
spec:
  tls:
  - hosts:
    - example.com
    secretName: app-tls
  rules:
  - host: example.com
    http:
      paths:
      - path: /my-api1(/|$)(.*)
        backend:
          serviceName: my-api
          servicePort: app1
      - path: /my-api2
        backend:
          serviceName: my-api
          servicePort: app2
  • port用于公开服务端口
  • targetPort定位到容器暴露端口

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...