【问题标题】:minikube ingress insisting on HTTPS despite TLS not configured [duplicate]尽管未配置 TLS,但 minikube 入口仍坚持使用 HTTPS [重复]
【发布时间】:2019-10-06 11:27:14
【问题描述】:

我想使用 minikube 在本地测试我的(Helm 打包的)Kubernetes 应用程序,并使用 Kubernetes 入口将 HTTP 代理到我的应用程序提供的 HTTP 服务。但这不起作用,因为入口(或入口控制器)坚持认为连接是 HTTPS,尽管我没有请求 TLS。如何确保入口允许 HTTP?

kubectl get --output=yaml ingress 表明有一个入口资源,用于 HTTP,没有 TLS:

apiVersion: v1
items:
- apiVersion: extensions/v1beta1
  kind: Ingress
  metadata:
    creationTimestamp: "2019-10-06T10:54:38Z"
    generation: 1
    labels:
      app.kubernetes.io/instance: quarreling-shrimp
      app.kubernetes.io/managed-by: Tiller
      app.kubernetes.io/name: mc
      app.kubernetes.io/version: 2.3.1-SNAPSHOT
      helm.sh/chart: mc-2.3.1
    name: quarreling-shrimp-mc
    namespace: default
    resourceVersion: "126597"
    selfLink: /apis/extensions/v1beta1/namespaces/default/ingresses/quarreling-shrimp-mc
    uid: 296f8d69-8f40-49c5-b352-acbc6ec1cc19
  spec:
    rules:
    - http:
        paths:
        - backend:
            serviceName: quarreling-shrimp-mc-be-svc
            servicePort: 8080
          path: /api
        - backend:
            serviceName: quarreling-shrimp-mc-fe
            servicePort: 80
          path: /
  status:
    loadBalancer:
      ingress:
      - ip: 192.168.122.66
kind: List
metadata:
  resourceVersion: ""
  selfLink: ""

但是当我尝试使用 HTTP 访问应用程序时,响应会尝试重定向以使用 HTTPS。这是curl -i 192.168.122.66的输出:

HTTP/1.1 308 Permanent Redirect
Server: openresty/1.15.8.1
Date: Sun, 06 Oct 2019 11:22:40 GMT
Content-Type: text/html
Content-Length: 177
Connection: keep-alive
Location: https://192.168.122.66/

<html>
<head><title>308 Permanent Redirect</title></head>
<body>
<center><h1>308 Permanent Redirect</h1></center>
<hr><center>openresty/1.15.8.1</center>
</body>
</html>

【问题讨论】:

    标签: kubernetes https minikube kubernetes-ingress


    【解决方案1】:

    minikube 使用 Nginx Ingress controller。那个控制器does a permanent redirect (HTTP status code 308) from initial HTTP to HTTPS

    默认情况下,如果为该入口启用了 TLS,控制器会重定向 (308) 到 HTTPS

    但是,正如您所指出的,文档建议它不应该在您的情况下进行重定向,因为您尚未启用 TLS。

    我观察到,一旦我在未启用 TLS 的情况下将 host: 字段添加到特定 Ingress 资源,生成的 curl 命令将返回 HTTP/1.1 200 而没有重定向操作:

      rules:
      - host: example.com
        http:
          paths:
          - backend:
              serviceName: some-svc
              servicePort: 80
            path: /
    

    $ curl -v http://$(kubectl get svc -l component=controller -o jsonpath='{.items[0].status.loadBalancer.ingress[0].ip}') -H 'Host: example.com'

    > GET / HTTP/1.1
    > Host: example.com
    > User-Agent: curl/7.47.0
    > Accept: */*
    > 
    < HTTP/1.1 200
    

    但是没有匹配主机的 HTTP GET 会导致重定向:

    $ curl -v http://$(kubectl get svc -l component=controller -o jsonpath='{.items[0].status.loadBalancer.ingress[0].ip}')

    > GET / HTTP/1.1
    > Host: XX.XX.XX.XX
    > User-Agent: curl/7.47.0
    > Accept: */*
    > 
    < HTTP/1.1 308 Permanent Redirect
    

    因此,我认为虽然host:字段是可选的,但如果你不在目标Ingress资源中指定它,Ingress控制器将无法正确识别TLS相关设置。

    猜你喜欢
    • 1970-01-01
    • 2022-07-29
    • 2019-04-20
    • 1970-01-01
    • 2018-06-18
    • 2020-10-24
    • 2022-11-22
    • 2021-05-06
    • 1970-01-01
    相关资源
    最近更新 更多