gpt4 book ai didi

nginx - kubernetes nginx 入口无法将 HTTP 重定向到 HTTPS

转载 作者:行者123 更新时间:2023-12-04 23:37:41 27 4
gpt4 key购买 nike

我有一个托管在 Google Cloud 平台上的网络应用程序,它位于负载均衡器后面,而负载均衡器本身位于入口后面。入口设置了 SSL 证书并按预期接受 HTTPS 连接,但存在一个问题:我无法将非 HTTPS 连接重定向到 HTTPS。例如,如果我使用 URL http://foo.com 连接到它或 foo.com ,它只是转到 foo.com , 而不是 https://foo.com正如我所料。连接到 https://foo.com显式生成所需的 HTTPS 连接。

我已经尝试了所有可以想象的注释和配置,但它顽固地拒绝了,尽管它甚至不应该是必要的,因为文档暗示如果指定了 TLS,重定向是自动的。我是否从根本上误解了入口资源的工作原理?

更新 : 有没有必要手动安装 GCP上的nginx入口?现在想想,我一直认为它在平台上的可用性是理所当然的,但是在了解如何在 Google 容器引擎上安装 nginx ingress 的信息后,我意识到答案可能比我想象的要简单得多。将进一步调查。

Kubernetes 版本: 1.8.5-gke.0

入口 YAML 文件:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: https-ingress
annotations:
kubernetes.io/ingress.class: "nginx"
ingress.kubernetes.io/ssl-redirect: "true"
ingress.kubernetes.io/secure-backends: "true"
ingress.kubernetes.io/force-ssl-redirect: "true"
spec:
tls:
- hosts:
- foo.com
secretName: tls-secret
rules:
- host: foo.com
http:
paths:
- path: /*
backend:
serviceName: foo-prod
servicePort: 80

kubectl 描述 https-ingress 输出
Name:             https-ingress
Namespace: default
Address:
Default backend: default-http-backend:80 (10.56.0.3:8080)
TLS:
tls-secret terminates foo.com
Rules:
Host Path Backends
---- ---- --------
foo.com
/* foo-prod:80 (<none>)
Annotations:
force-ssl-redirect: true
secure-backends: true
ssl-redirect: true
Events: <none>

最佳答案

问题确实是 Nginx Ingress 在 Google Cloud Platform 上不是标准配置,需要手动安装 - 哦!

但是,我发现安装它比预期的要困难得多(特别是因为我的需求专门与 GCP 有关),所以我将概述我从头到尾采取的每一步,希望能帮助其他使用该特定云的人并有这种特定需求,并找到不太适合该法案的通用指南。

  • 获取集群凭据

  • 这是 GCP 特定的步骤,让我绊倒了一段时间 - 如果您遇到奇怪的错误,例如
    kubectl unable to connect to server: x509: certificate signed by unknown authority
    尝试运行 kubectl 命令时。运行它来设置你的控制台:
    gcloud container clusters get-credentials YOUR-K8s-CLUSTER-NAME --z YOUR-K8S-CLUSTER-ZONE
  • 安装 Helm

  • Helm 本身并不难安装,安装说明可以在 GCP 自己的文档中找到;然而,他们忽略了,在新版本的 K8s 上,需要 RBAC 配置才能让 Tiller 安装东西。在 helm init 之后运行以下命令:
    kubectl create serviceaccount --namespace kube-system tiller
    kubectl create clusterrolebinding tiller-cluster-rule --clusterrole=cluster-admin --serviceaccount=kube-system:tiller
    kubectl patch deploy --namespace kube-system tiller-deploy -p '{"spec":{"template":{"spec":{"serviceAccount":"tiller"}}}}'
  • 通过 Helm 安装 Nginx Ingress

  • 这是让我绊倒的另一个步骤 - rbac.create=true对于上述 RBAC 因子是必要的。
    helm install --name nginx-ingress-release stable/nginx-ingress --set rbac.create=true
  • 创建您的 Ingress 资源

  • 这一步是最简单的,有很多示例 nginx 入口配置可以调整 - 请参阅上面@JahongirRahmonov 的示例。您必须记住的是,此步骤需要半小时到一个多小时的时间来设置 - 如果您更改配置并立即再次检查,则不会设置它,但不要将其视为暗示你把事情搞砸了!稍等片刻,先看看。

    很难相信这就是现在使用 Kubernetes 将 HTTP 重定向到 HTTPS 需要多少时间,但我希望本指南可以帮助其他人遇到这样一个看似简单但又非常关键的需求。

    关于nginx - kubernetes nginx 入口无法将 HTTP 重定向到 HTTPS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48555757/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com