微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

400 Bad Request 您正在对启用 SSL 的服务器端口 kubernetes pod 使用纯 HTTP

如何解决400 Bad Request 您正在对启用 SSL 的服务器端口 kubernetes pod 使用纯 HTTP

我收到错误400 错误请求您的浏览器发送了此服务器无法理解的请求。 原因:您对启用 SSL 的服务器端口使用纯 HTTP。 请改用 HTTPS 方案访问此 URL。"

我想要实现的是:

1.Docker 运行 使用 apache2 和 Shibboleth 的 Docker Image 分别使用自签名证书在端口 http(8090) 和 https(8443) 上运行。使用 docker run 在本地运行图像工作正常。 http://localhost:8090/ ----> 工作正常 https://localhost:8443/Shibboleth.sso/Status ----> 给出证书错误,但在接受并忽略后工作正常。 (Shibboleth 服务通过 apache2 000-default.conf ProxyPass /Shibboleth.sso/ https://localhost:8443/Shibboleth.sso/Status 访问)

  1. Kubernetes 平台 下面是为访问同一映像而创建的部署、服务和入口。
apiVersion: apps/v1
kind: Deployment
Metadata:
  namespace: test
  name: demo
  labels:
    app: demo
spec:
  #replicas: 1
  selector:
    matchLabels:
      app: demo-pod
  template:
    Metadata:
      labels:
        app: demo-pod
    spec:
      containers:
      - image: <repository>public/demo-v1
        name: demo
        ports:
        - containerPort: 8154
          name: demo-ui
        - containerPort: 8090
          name: http
        - containerPort: 8443
          name: https
        securityContext:
          runAsNonRoot: true
          runAsUser: 1000
        resources:
           limits:
             cpu: 1000m
             memory: 8024Mi
           requests:
             cpu: 500m
             memory: 4096Mi 
      dnsPolicy: ClusterFirst
      imagePullSecrets:
      - name: regcred
      restartPolicy: Always
---
apiVersion: v1
kind: Service
Metadata:
  namespace: test
  name: demo-svc
  labels:
    app: demo
spec:
  selector:
    app: demo-pod
  ports:
  - port: 8154
    name: demo-ui
    targetPort: 8154
    protocol: TCP
  - port: 8090
    name: http
    targetPort: 8090
    protocol: TCP
  - port: 8443
    name: https
    targetPort: 8443
    protocol: TCP     
---
apiVersion: networking.k8s.io/v1
kind: Ingress
Metadata:
  namespace: test
  name: demo-ing
  labels:
    app: demo
spec:
  ingressClassName: internal
  tls:
  - hosts:
    - demo.example.com
  rules:
  - host: demo.example.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: demo-svc
            port:
              number: 8090
      - path: /demo-ui
        pathType: Prefix
        backend:
          service:
            name: demo-svc
            port:
              number: 8090
      - path: /Shibboleth.sso
        pathType: Prefix
        backend:
          service:
            name: demo-svc
            port:
              number: 8443 

认域为 *.example.com 使用 https

when hitting **https://demo.example.com/ --> http://<pod-IP>:8090**  and working fine 
but when accessing the **https://demo.example.com/Shibboleth.sso/Status --- > http://<pod-IP>:8443**

并返回“400 错误请求您的浏览器发送了此服务器无法理解的请求。原因:您对启用 SSL 的服务器端口使用纯 HTTP。而是使用 HTTPS 方案访问此 URL,请"

我也通过入口注释和 apache2 重定向尝试了多种解决方案,但似乎没有任何帮助。

在 apache2 上进行重定向时,它不会将本地主机作为变量。

 RewriteEngine on
 ReWriteCond %{SERVER_PORT} !^8443$
 RewriteRule ^/Shibboleth.sso(.*) https://localhost:8443/Shibboleth.sso/$1 [NC,R,L]

不考虑 localhost 并作为 dns。

还尝试在入口级别重定向,这也导致 404 not found 错误

在这里帮忙!!!

解决方法

能否请您尝试将此注释添加到您的入口文件中?

annotations:
    kubernetes.io/ingress.class: "nginx"
    nginx.ingress.kubernetes.io/ssl-passthrough: "true"
    nginx.ingress.kubernetes.io/secure-backends: "true"
    nginx.ingress.kubernetes.io/backend-protocol: "HTTPS"

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?