如何修复“ 503服务暂时不可用”

时间:2019-10-25 10:24:12

标签: kubernetes kubernetes-ingress nginx-ingress docker-desktop

仅供参考:

  1. 我在docker桌面上为Mac运行Kubernetes
  2. 基于Nginx图片的网站

我在Kubetesetes上运行了2个简单的网站部署,并使用NodePort服务。然后,我想使用入口路由到网站。当我打开浏览器并访问网站时,出现如下图所示的错误503。那么,如何解决此错误?

### Service
apiVersion: v1
kind: Service
metadata:
  name: app-svc
  labels:
    app: app1
spec:
  type: NodePort
  ports:
  - port: 80
  selector:
    app: app1
---
apiVersion: v1
kind: Service
metadata:
  name: app2-svc
  labels:
    app: app2
spec:
  type: NodePort
  ports:
  - port: 80
  selector:
    app: app2

### Ingress-Rules
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: app-ingress
  annotations:
    ingress.kubernetes.io/rewrite-target: /
spec:
  rules:
  - http:
      paths:
      - path: /app1
        backend:
          serviceName: app-svc
          servicePort: 30092
      - path: /app2
        backend:
          serviceName: app2-svc
          servicePort: 30936


enter image description here

4 个答案:

答案 0 :(得分:1)

是的,我最终遇到相同的错误。一旦我将服务类型更改为“ ClusterIP”,它对我来说就很好了。

答案 1 :(得分:0)

我建议您使用服务类型ClusterIP 看一下这篇有用的文章:services-kubernetes

如果您使用Ingress,则必须知道Ingress不是一种服务,而是一个对象,该对象充当反向代理和群集的单个入口点,该群集将请求路由到其他服务。最基本的Ingress是NGINX Ingress Controller,NGINX在其中扮演反向代理的角色,同时还充当SSL。在下图上,您可以看到环境对象的特定组件之间的工作流程。

入口通过ClusterIP和Kubernetes代理,NodePort或LoadBalancer暴露给集群的外部,并根据配置的规则路由传入的流量。

服务定义示例:

---
apiVersion: v1
kind: Service
metadata:
  name: app-svc
  labels:
    app: app1
spec:
  type: ClusterIP
  ports:
  - port: 80
  selector:
    app: app1
---
apiVersion: v1
kind: Service
metadata:
  name: app2-svc
  labels:
    app: app2
spec:
  type: ClusterIP
  ports:
  - port: 80
  selector:
    app: app2

让我知道是否有帮助。

答案 2 :(得分:0)

在搜索解决方案以找到nginx后,尽管服务名称均已正确配置,但仍连续返回503响应,从而找到了此页面。对我来说,问题是我已经在特定的名称空间中配置了kubernetes服务,但是没有将入口组件更新为相同的名称空间。尽管是这样一个简单的解决方案,但它一点也不明显!

答案 3 :(得分:0)

首先,您需要将app-service的服务类型更改为ClusterIP,因为Ingress对象将从内部访问这些Pods(服务)簇。 (当您要允许访问群集中的Pod时,将使用ClusterIP服务。)

第二,通过运行kubectl get services确保服务正在运行,并根据backend路由规则的Ingress部分中的名称检查正在运行的服务名称