Rav*_*ven 3 docker google-cloud-platform kubernetes google-kubernetes-engine kubernetes-ingress
我目前有一个可用的前端和后端节点端口,其中包含使用 GKE 的 Google 管理证书的 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
Run Code Online (Sandbox Code Playgroud)
目前GKEIngress 不支持开箱即用HTTP->HTTPS重定向。
这里有一个正在进行的功能请求:
有一些解决方法:
Ingress控制器,如nginx-ingress.HTTP->HTTPS重定向GCP。如何正确禁用 GKE 入口上的 http,或者如何将所有流量重定向到 https?
要禁用HTTP,GKE您可以使用以下注释:
kubernetes.io/ingress.allow-http: "false"此注释将:
443 (HTTPS)。80 (HTTP)导致错误代码:404。专注于前面提到的解决方法:
Ingress控制器,如nginx-ingress进行HTTP->HTTPS重定向的方法之一是使用nginx-ingress. 您可以使用官方文档进行部署:
该Ingress控制器将创建一个类型的服务LoadBalancer,它将成为您的流量的入口点。Ingress对象将响应LoadBalancer IP。您可以从安装部分下载清单并修改它以支持您在GCP. 更多参考可以在这里找到:
您将需要提供自己的证书或使用诸如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
Run Code Online (Sandbox Code Playgroud)
HTTP->HTTPS重定向GCP。还有一个选项可以为您的资源手动创建重定向规则Ingress。您需要遵循官方文档:
使用上述文档的一部分,您需要创建一个HTTPLoadBalancer 响应与您的Ingress资源(保留的静态 IP)相同的 IP,将流量重定向到HTTPS.
免责声明!
您的
Ingress资源需要具有以下注释:
kubernetes.io/ingress.allow-http: "false"缺少那里将导致禁止您创建上述重定向。
| 归档时间: |
|
| 查看次数: |
1692 次 |
| 最近记录: |