502 Server Error when creating http load balancer in google/GKE

喜你入骨 提交于 2021-02-05 11:48:55

问题


My application consists of play web application deployed using GKE. The application was running fine (using Deployment and Loadbalancer service) and then I decided to use Ingress. I made the following changes which has made the application unreachable. I get 502 error when I try to connect with the application using ingress IP.

The application is of kind Deployment.

apiVersion: apps/v1
kind: Deployment
metadata:
  name: webapp
spec:
  replicas: 2
  selector:
    matchLabels:
      app: webapp

It has a service associated with it

apiVersion: v1
kind: Service
metadata:
  name: webapp-service
spec:
  selector:
    app: webapp
  ports:
    - protocol: TCP
      port: 9000 #this service is reachable at this port
      targetPort: 9000 #this service will forward the request to correspoding nodes of the service at this port
  #type: LoadBalancer
  type: NodePort

Then I applied the following file to create ingress

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: webapp-https-loadbalancer-ingress
  annotations:
    kubernetes.io/ingress.class: "gce"
spec:
  rules:
    - http:
        paths:
          - path: /*
            backend:
              serviceName: webapp-service
              servicePort: 9000

I can see that there is an IP address (which is also reachable from outside) when I run

kubectl describe ingress webapp-https-loadbalancer-ingress
Name:             webapp-https-loadbalancer-ingress
Namespace:        default
Address:          3x.yyy.zzz.pq
Default backend:  default-http-backend:80 (10.88.0.5:8080)
Rules:
  Host        Path  Backends
  ----        ----  --------
  *
...      Type    Reason  Age    From                     Message
      ----    ------  ----   ----                     -------
      Normal  ADD     10m    loadbalancer-controller  default/webapp-https-loadbalancer-ingress
      Normal  CREATE  9m10s  loadbalancer-controller  ip: 3x.yyy.zzz.pq

But I am not able to reach the application using https://3x.yyy.zzz.pq. I haven't yet associated the domain with the IP. I tried to connect using curl and got error- 502 bad gateway error

curl -v 3x.xxx.xxx.xxx
* Expire in 0 ms for 6 (transfer 0x55d4c5258f90)
*   Trying 3x.xxx.xxx.xxx...
* TCP_NODELAY set
* Expire in 200 ms for 4 (transfer 0x55d4c5258f90)
* Connected to 3x.xxx.xxx.xxx (3x.xxx.xxx.xxx) port 80 (#0)
> GET / HTTP/1.1
> Host: 3x.xxx.xxx.xxx
> User-Agent: curl/7.64.0
> Accept: */*
>
< HTTP/1.1 502 Bad Gateway
< Content-Type: text/html; charset=UTF-8
< Referrer-Policy: no-referrer
< Content-Length: 332
< Date: Tue, 22 Dec 2020 22:27:23 GMT
<

<html><head>
<meta http-equiv="content-type" content="text/html;charset=utf-8">
<title>502 Server Error</title>
</head>
<body text=#000000 bgcolor=#ffffff>
<h1>Error: Server Error</h1>
<h2>The server encountered a temporary error and could not complete your request.<p>Please try again in 30 seconds.</h2>
<h2></h2>
</body></html>
* Connection #0 to host 3x.xxx.xxx.xxx left intact

回答1:


The issue was that the load balancer's IP was not in the allowed-hosts list in the server. As temporary fix, I used wild card in server configuration to allow traffic from all hosts. I am still figuring out how to restrict it to load balancer's internal IPs



来源:https://stackoverflow.com/questions/65422229/502-server-error-when-creating-http-load-balancer-in-google-gke

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!