【发布时间】:2018-02-14 02:04:59
【问题描述】:
我们在 GKE (Google Kubernetes Engine) 上的 Kubernetes 集群中运行多项服务,但在使用 Ingress 配置路由时遇到问题。
假设我们有auth-service 和user-service,并希望通过以下网址访问它们:http://www.example.com/auth 和http://www.example.com/user。对这些 url 的所有请求都应重定向到正确的服务并在内部路由 (http://www.example.com/user/people -> http://user-service/people)。
这些是我们对身份验证服务的配置:
apiVersion: apps/v1beta1
kind: Deployment
metadata:
name: api-auth
spec:
replicas: 1
template:
metadata:
labels:
app: api-auth
tier: backend
track: stable
spec:
containers:
- name: api-auth
image: "<our-image>"
ports:
- name: http
containerPort: 9000
livenessProbe:
httpGet:
path: /health
port: 9000
initialDelaySeconds: 180
timeoutSeconds: 5
readinessProbe:
httpGet:
path: /health
port: 9000
initialDelaySeconds: 180
timeoutSeconds: 5
---
kind: Service
apiVersion: v1
metadata:
name: auth-service
labels:
app: api-auth
spec:
type: NodePort
selector:
app: api-auth
tier: backend
ports:
- port: 80
targetPort: 9000
在内部,服务在 Tomcat 的 9000 端口上运行,这部分工作正常。
问题在于我们的 Ingress 配置:
kind: Ingress
apiVersion: extensions/v1beta1
metadata:
name: auth-ingress
annotations:
kubernetes.io/ingress.global-static-ip-name: <our-static-api>
kubernetes.io/ingress.class: "gce"
labels:
app: api-auth
spec:
rules:
- http:
paths:
- path: /auth
backend:
serviceName: auth-service
servicePort: 80
- path: /auth/*
backend:
serviceName: auth-service
servicePort: 80
- path: /user
backend:
serviceName: user-service
servicePort: 80
- path: /user/*
backend:
serviceName: user-service
servicePort: 80
每当我通过以下方式访问我们的静态 api(我们现在称之为 example.com)时:http://www.example.com/auth,我得到 502 - Bad gateway。运行kubectl describe ingress 表示,我们服务的健康状况是unknown。
我正在研究可能导致这种奇怪行为的想法。有人能指出我正确的方向吗?
【问题讨论】:
-
您确定 /health 路径返回 200 状态码吗?
-
kubectl get pods表示准备好了
标签: kubernetes google-kubernetes-engine