使用Kubernetes Ingress进行路由故障排除

时间:2019-09-25 08:26:06

标签: kubernetes google-kubernetes-engine kubernetes-ingress

我试图通过前端Pod(cup-fe)和一个后端pod来设置GKE环境,该环境用于在登录时对用户进行身份验证(cup-auth),但是我的入口无法正常工作。

以下是运行带有nginx应用程序的nginx的前端吊舱(cup-fe)。我还创建了一个由“ cup.xxx.it”和“ cup-auth.xxx.it” dns解析的静态IP地址:

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: cup-fe
  namespace: default
  labels:
    app: cup-fe
spec:
  replicas: 2
  selector:
    matchLabels:
      app: "cup-fe"
  template:
    metadata:
      labels:
        app: "cup-fe"
    spec:
      containers:
      - image: "eu.gcr.io/xxx-cup-yyyyyy/cup-fe:latest"
        name: "cup-fe"
      dnsPolicy: ClusterFirst

然后是身份验证窗格(cup-auth):

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: cup-auth
  namespace: default
  labels:
    app: cup-auth
spec:
  replicas: 1
  selector:
    matchLabels:
      app: cup-auth
  template:
    metadata:
      labels:
        app: cup-auth
    spec:
      containers:
        image:  "eu.gcr.io/xxx-cup-yyyyyy/cup-auth:latest"
        imagePullPolicy: Always
        name: cup-auth
        ports:
        - containerPort: 8080
          protocol: TCP
        - containerPort: 8443
          protocol: TCP
        - containerPort: 8778
          name: jolokia
          protocol: TCP
        - containerPort: 8888
          name: management
          protocol: TCP
      dnsPolicy: ClusterFirst

然后我创建了两个NodePort来暴露上述容器:

kubectl expose deployment cup-fe --type=NodePort --port=80
kubectl expose deployment cup-auth --type=NodePort --port=8080

最后,我创建了一个将外部http请求路由到服务的入口:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: http-ingress
  namespace: default
  labels:
    app: http-ingress
spec:
  rules:
  - host: cup.xxx.it
    http:
      paths:
      - path: /*
        backend:
          serviceName: cup-fe
          servicePort: 80
  - host: cup-auth.xxx.it
    http:
      paths:
      - path: /*
        backend:
          serviceName: cup-auth

因此,我可以到达http://cup.xxx.it处的前端吊舱,Angular应用将我重定向到http://cup-auth.xxx.it/login,但我收到的错误请求只有502个。使用kubectl describe ingress命令,我可以看到cup-auth pod的后端不正常。

我使用cup-auth标签粘贴成功的输出:

$ kubectl exec -it cup-fe-7f979bb747-6lqfx wget cup.xxx.it/login
Connecting to cup.xxx.it
login                100% |********************************|  1646  0:00:00 ETA

然后是无效的输出:

$ kubectl exec -it cup-fe-7f979bb747-6lqfx wget cup-auth.xxx.it/login
Connecting to cup-auth.xxx.it
wget: server returned error: HTTP/1.1 502 Bad Gateway
command terminated with exit code 1

1 个答案:

答案 0 :(得分:0)

我尽了最大的努力来复制您的设置,但是没有任何问题。 我通常可以在豆荚内外拨打cup-auth.testdomain.internal/login

通常,当接收到LB的请求无法转发到后端时,会发生502错误。既然您提到自己看到的后端不健康,这可能就是原因。

这可能是由于运行状况检查配置错误或您的应用程序出现问题引起的。

首先,我将查看日志以查看请求失败的原因,并消除运行状况检查或应用程序本身没有问题。