【问题标题】:Kubernetes ingress edit: HTTP 400 Bad request - The plain HTTP request was sent to HTTPSKubernetes 入口编辑:HTTP 400 错误请求 - 纯 HTTP 请求已发送到 HTTPS
【发布时间】:2019-05-01 13:04:03
【问题描述】:

在手动编辑 web 应用程序的入口或通过自动作业编辑修改白名单 IP 的入口后,完美加载的 web 应用程序会提供*HTTP 400 Bad request - The plain HTTP request was sent to HTTPS* 端口

显然,当我们在清除 webapp 部署后重新部署 webapp 时,这个问题得到了解决......

任何指向这个的指针都会很棒,因为这发生在我们的 PROD 环境中,并且在任何较低的环境中都无法重现。 注意事项:- - Nginx Ingress 控制器设置在较低的环境和 Prod 环境中是相同的。

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  annotations:
    ingress.kubernetes.io/force-ssl-redirect: "true"
    ingress.kubernetes.io/ingress.allow-http: "false"
    ingress.kubernetes.io/proxy-body-size: 20M
    ingress.kubernetes.io/secure-backends: "true"
    ingress.kubernetes.io/whitelist-source-range: xxx.yy.zz.pp/32, yyy.ss.dd.kkl/32
    ingress.kubernetes.io/whitelist-source-range-status: unlocked
creationTimestamp: 2018-11-29T15:34:05Z
generation: 5
 labels:
   app: xyz-abc-pqr
  name: xxxx-webapp-yyyy-zzzz
  namespace: nspsace-name
  resourceVersion: "158237270"
  selfLink: /apis/extensions/v1beta1/namespaces/nspsace-name/ingresses/xxxx-webapp-yyyy-zzzz
  uid: 348f892e-f3ec-11e8-aa6f-0a0340041348
  spec:
   rules:
    - host: ssssssss.wwwwweewwerwerw.co.uk
      http:
      paths:
       - backend:
          serviceName: xxxx-webapp-yyyy-zzzz
          servicePort: 443
        path: /
    - host: xxxx-webapp-yyyy-zzzz.bbbbv.lasdfkla.ajksdfh.ioohhsaf.pp
     http:
       paths:
        - backend:
          serviceName: xxxx-webapp-yyyy-zzzz
          servicePort: 443
       path: /
     tls:
       - hosts:
          - ssssssss.wwwwweewwerwerw.co.uk
          - xxxx-webapp-yyyy-zzzz.bbbbv.lasdfkla.ajksdfh.ioohhsaf.pp
         secretName: xxxx-webapp-yyyy-zzzz-server-tls
     status:
       loadBalancer:
        ingress:
         - {}

【问题讨论】:

  • 你能发布你的 Ingress YAML 吗?并描述您手动更改的什么以及如何kubectl edit?
  • 是的,使用 kubectl edit..在上面发布了入口 YAML。我们只是更改了白名单 IP 以限制 webapp 访问外部世界。
  • 确保您的增量部署实际上包含入口更新。也许像helm upgrade --install (your-ingress)

标签: kubernetes kubernetes-ingress nginx-ingress


【解决方案1】:

入口控制器及其更新配置的方式可能存在问题。我假设您使用的是nginx ingress controller,因此您可以在之后检查配置:

$ kubectl cp <nginx-ingress-controller-pod>:nginx.conf nginx.conf.before
$ kubectl edit ingress <your-ingress>
$ kubectl cp <nginx-ingress-controller-pod>:nginx.conf nginx.conf.after
$ diff nginx.conf.before nginx.conf.after

您可以看到由于以下原因,nginx 可能会发生这种情况:Dealing with nginx 400 "The plain HTTP request was sent to HTTPS port" error

【讨论】:

  • 我的 Web 应用程序需要一个内部入口和一个外部入口来满足内部流量和外部世界的需求。问题是没有在内部入口模板中指定/提及 Ingress_Class,该模板正在创建额外的入口来处理外部流量,这些流量的主机映射与外部允许的预期主机 URL 不同。在指定正确的 INGRESS CLASS 注释后,所有内部入口控制器 Pod 都会更新 nginx.conf。
  • 嗨@Avi,你能澄清一下哪些入口模板缺少类名吗?
  • 嗨@SteveK - 作为内部入口模板的一部分缺少类名(指向内部负载均衡器的注释)。
猜你喜欢
  • 1970-01-01
  • 2019-07-28
  • 1970-01-01
  • 1970-01-01
  • 2015-04-10
  • 2016-11-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多