如何在GKE Ingress gce上将HTTPS设置为默认值



我目前有一个工作的前端和后端节点端口,带有GKE的谷歌托管证书的Ingress服务设置。

然而,我的问题是,默认情况下,当用户访问samplesite.com时,它使用http作为默认值这意味着用户需要在浏览器中专门键入https://samplesite.com以便获得我的网站的https版本。

如何在GKE入口上正确禁用http,或者如何将所有流量重定向到https我知道这也可以在我的后端代码中强制完成,但我想在我的Kubernetes设置中分离问题并处理它。

这是我的ingress.yaml文件:

kind: Service
apiVersion: v1
metadata:
name: frontend-node-service
namespace: default
spec:
type: NodePort
selector:
app: frontend
ports:
- port: 5000
targetPort: 80
protocol: TCP
name: http
---
kind: Service
apiVersion: v1
metadata:
name: backend-node-service
namespace: default
spec:
type: NodePort
selector:
app: backend
ports:
- port: 8081
targetPort: 9229
protocol: TCP
name: http
---
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: samplesite-ingress-frontend
namespace: default
annotations:
kubernetes.io/ingress.global-static-ip-name: "samplesite-static-ip"
kubernetes.io/ingress.allow-http: "false"
networking.gke.io/managed-certificates: samplesite-ssl
spec:
backend:
serviceName: frontend-node-service
servicePort: 5000
---
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: samplesite-ingress-backend
namespace: default
annotations:
kubernetes.io/ingress.global-static-ip-name: "samplesite-backend-ip"
kubernetes.io/ingress.allow-http: "false"
networking.gke.io/managed-certificates: samplesite-api-ssl
spec:
backend:
serviceName: backend-node-service
servicePort: 8081

当前GKEIngress不支持开箱即用的HTTP->HTTPS重定向

这里有一个正在进行的功能请求:

  • Issuetracker.google.com:问题:使用HTTP(S(负载均衡器时,将所有HTTP流量重定向到HTTPS

有一些解决方法

  • 使用不同的Ingress控制器,如nginx-ingress
  • 创建HTTP->GCP云控制台中的HTTPS重定向

如何在GKE入口上正确禁用http,或者如何将所有流量重定向到https?

要在GKE上禁用HTTP,可以使用以下注释:

  • kubernetes.io/ingress.allow-http: "false"

此注释将:

  • 仅允许端口443 (HTTPS)上的通信
  • 拒绝端口80 (HTTP)上的通信,导致错误代码404

专注于前面提到的解决方案:

使用不同的Ingress控制器,如nginx-ingress

使CCD_ 17->CCD_ 18重定向就是使用CCD_。您可以使用官方文档进行部署:

  • Kubernets.github.io:Ingress nginx:Deploy:GCE-GKE

Ingress控制器将创建类型为LoadBalancer的服务,该服务将成为流量的入口点。Ingress对象将在LoadBalancer IP上作出响应。您可以从安装部分下载清单,并对其进行修改,以支持您在GCP中请求的静态IP。更多参考可以在这里找到:

  • Stackoverlow.com:如何为Kubernetes负载均衡器指定静态IP地址

您将需要提供自己的证书或使用cert-manager等工具来将HTTPS流量作为注释:networking.gke.io/managed-certificates无法与nginx-ingress一起使用。

我使用了这个YAML定义,在没有任何其他注释的情况下,我总是被重定向到HTTPS:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: nginx-ingress
annotations:
kubernetes.io/ingress.class: "nginx" # IMPORTANT
spec:
tls: # HTTPS PART
- secretName: ssl-certificate # SELF PROVIDED CERT NAME
rules:
- host:
http:
paths:
- path: /
backend:
serviceName: hello-service
servicePort: hello-port

创建HTTP->GCP云控制台中的HTTPS重定向

还可以选择手动Ingress资源创建重定向规则。您需要遵循官方文件:

  • Cloud.google.com:负载平衡:Docs:HTTPS:设置HTTP->HTTPS重定向

使用上述文档中的部分内容,您需要创建一个HTTPLoadBalancer,在与Ingress资源(保留静态IP(相同的IP上响应,将流量重定向到HTTPS

免责声明!

您的Ingress资源需要有以下注释:

  • kubernetes.io/ingress.allow-http: "false"

缺少将导致您无法创建上述重定向。

相关内容

  • 没有找到相关文章

最新更新