You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

关于Ingress按端口配置后端规则及Google云HTTPS跳转的技术问询

我来帮你解决这两个问题哈~

关于Ingress后端端口配置与GKE Ingress HTTP转HTTPS的解决方案

一、如何按端口配置Ingress后端规则

Ingress本身是基于HTTP/HTTPS协议的路由规则,后端端口的配置本质是关联到Kubernetes Service的暴露端口——你只需要在Ingress的backend字段里指定目标Service的名称及其对应的端口号即可。

举个实际场景的例子:假设你有两个Service,api-service(端口8080提供API服务)和web-service(端口3000提供前端页面),想要通过同一个域名的不同路径分别指向这两个不同端口的服务,对应的Ingress YAML配置如下:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: multi-port-ingress
spec:
  rules:
  - host: your-domain.com
    http:
      paths:
      - path: /api
        pathType: Prefix
        backend:
          service:
            name: api-service
            port:
              number: 8080  # 指向api-service的8080端口
      - path: /
        pathType: Prefix
        backend:
          service:
            name: web-service
            port:
              number: 3000  # 指向web-service的3000端口

如果是同一个路径需要区分不同端口(这种场景较少,通常对应不同协议,但Ingress仅处理HTTP/HTTPS),你可以拆分不同的Host规则来实现。

二、GKE Ingress实现HTTP自动跳转HTTPS的方案

你说得没错,GKE的原生Ingress控制器确实没有直接的“强制SSL”配置项,但我们可以通过两种靠谱的方式实现HTTP请求自动重定向到HTTPS,不用让用户手动输入https://:

方法1:使用BackendConfig配置CLB重定向(推荐)

Google Cloud Load Balancer(CLB)本身支持HTTP到HTTPS的重定向,我们可以通过BackendConfig资源把这个能力关联到你的Ingress上:

  1. 首先创建一个BackendConfig资源,开启HTTPS重定向:
apiVersion: cloud.google.com/v1
kind: BackendConfig
metadata:
  name: http-redirect-config
spec:
  redirectToHttps:
    enabled: true
    responseCodeName: MOVED_PERMANENTLY  # 返回301永久重定向,也可选用TEMPORARY_REDIRECT返回302
  1. 修改你的whoami Service,给80端口绑定上述BackendConfig:
apiVersion: v1
kind: Service
metadata:
  name: whoami-service
  annotations:
    # 给Service的80端口绑定重定向配置
    cloud.google.com/backend-config: '{"ports": {"80":"http-redirect-config"}}'
spec:
  ports:
  - name: http
    port: 80
    targetPort: 80
  - name: https
    port: 443
    targetPort: 443
  selector:
    app: whoami
  1. 更新Ingress规则,同时包含HTTP和HTTPS路由:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: whoami-ingress
  annotations:
    kubernetes.io/ingress.class: "gce"  # 指定使用GKE原生Ingress控制器
    networking.gke.io/managed-certificates: "your-managed-cert"  # 关联你的GKE管理证书
spec:
  tls:
  - hosts:
    - whoami.domain.com
    # 若使用自管理证书,需添加secretName字段指定证书Secret
    # secretName: whoami-tls-secret
  rules:
  - host: whoami.domain.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: whoami-service
            port:
              number: 80  # HTTP流量触发BackendConfig的重定向
  - host: whoami.domain.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: whoami-service
            port:
              number: 443  # HTTPS流量直接走原服务端口

这样用户访问http://whoami.domain.com时,CLB会自动返回301重定向到HTTPS地址,完全不用用户手动切换协议。

方法2:部署专门的重定向服务

如果因为版本限制等原因无法使用BackendConfig,可以部署一个轻量的重定向服务(比如用Nginx):

  1. 创建Nginx重定向配置的ConfigMap:
apiVersion: v1
kind: ConfigMap
metadata:
  name: redirect-nginx-config
data:
  nginx.conf: |
    events {}
    http {
      include /etc/nginx/mime.types;
      server {
        listen 80;
        server_name whoami.domain.com;
        return 301 https://$host$request_uri;
      }
    }
  1. 部署重定向服务的Deployment和Service:
apiVersion: apps/v1
kind: Deployment
metadata:
  name: redirect-deployment
spec:
  replicas: 2
  selector:
    matchLabels:
      app: redirect
  template:
    metadata:
      labels:
        app: redirect
    spec:
      containers:
      - name: nginx
        image: nginx:alpine
        volumeMounts:
        - name: config
          mountPath: /etc/nginx/nginx.conf
          subPath: nginx.conf
      volumes:
      - name: config
        configMap:
          name: redirect-nginx-config
---
apiVersion: v1
kind: Service
metadata:
  name: redirect-service
spec:
  ports:
  - port: 80
    targetPort: 80
  selector:
    app: redirect
  1. 更新Ingress规则,拆分HTTP和HTTPS流量:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: whoami-ingress
  annotations:
    kubernetes.io/ingress.class: "gce"
    networking.gke.io/managed-certificates: "your-managed-cert"
spec:
  tls:
  - hosts:
    - whoami.domain.com
  rules:
  - host: whoami.domain.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: redirect-service
            port:
              number: 80  # HTTP流量走重定向服务
  - host: whoami.domain.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: whoami-service
            port:
              number: 443  # HTTPS流量走原服务

这种方法也能实现同样效果,只是需要额外维护一个轻量服务。


内容的提问来源于stack exchange,提问作者pjotr_dolphin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 03:52:09