仅供参考:
我在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
答案 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
部分中的名称检查正在运行的服务名称