代码之家  ›  专栏  ›  技术社区  ›  Manu Chadha

在GKE中保护客户端和应用程序之间的连接后,无法访问应用程序

  •  0
  • Manu Chadha  · 技术社区  · 4 年前

    我的应用程序包括 play 使用GKE部署的web应用程序。应用程序运行良好(使用 Deployment Loadbalancer 服务),然后我决定使用 Ingress 。我做了以下更改,导致应用程序无法访问。我明白了 502 尝试使用以下命令连接应用程序时出错 ingress IP。

    该应用程序属于同类 部署 .

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

    它有一个 service 与之相关

    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
    

    然后,我应用了以下文件来创建 进入

    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
    

    当我运行时,我可以看到有一个IP地址(也可以从外部访问)

    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
    

    但我无法使用访问应用程序 https://3x.yyy.zzz.pq 。我尚未将域与IP相关联。我尝试使用连接 curl 并得到错误- 502 bad gateway 错误

    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
    
    0 回复  |  直到 4 年前
        1
  •  0
  •   Manu Chadha    4 年前

    问题是负载平衡器的IP不在服务器中允许的主机列表中。作为临时修复,我在服务器配置中使用了通配符来允许来自所有主机的流量。我仍在研究如何将其限制在负载均衡器的内部IP上