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

私有网络Kubernetes NGINX Ingress无主机配置HTTPS及SSL卸载实现

在私有Kubernetes环境实现无Host规则的HTTPS Ingress(SSL卸载)

没问题,完全可以在私有网络的Kubernetes NGINX Ingress Controller中启用HTTPS,并且不需要定义Host规则就能实现你要的功能——当用户访问https://192.168.1.1时,在Ingress层完成SSL卸载。

为什么你之前的配置不生效?

你之前的配置里指定了hosts: example.com,但用户访问的是IP地址192.168.1.1,请求的Host头要么是空,要么是这个IP,根本匹配不上example.com,所以Ingress不会用你的SSL证书,自然无法生效。

解决方案步骤

1. 准备SSL证书及Kubernetes Secret

因为是私有网络,自签证书完全够用。如果还没有证书,用openssl生成一个CN为目标IP的证书:

# 生成自签证书,CN设为你的访问IP 192.168.1.1
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout tls.key -out tls.crt -subj "/CN=192.168.1.1"

# 将证书导入Kubernetes Secret
kubectl create secret tls my-secret --key tls.key --cert tls.crt

2. 编写正确的Ingress配置

核心是不指定Host规则,同时让TLS配置匹配IP请求。这里有两种可选配置方式:

方式一:完全不指定Host(匹配所有无Host头的请求)
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: internal-https-ingress
  annotations:
    nginx.ingress.kubernetes.io/ssl-redirect: "true"  # 强制HTTP请求跳转到HTTPS
    nginx.ingress.kubernetes.io/ssl-passthrough: "false"  # 明确启用SSL卸载(默认值就是false,可省略)
spec:
  tls:
    - secretName: my-secret  # 这里不要加hosts字段,让Secret作为默认证书生效
  rules:
    - http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: my-cluster-service
                port:
                  number: 80
方式二:指定IP作为Host(更精准匹配)

如果你想只匹配针对192.168.1.1的请求,可以把IP加到TLS的hosts里:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: internal-https-ingress
  annotations:
    nginx.ingress.kubernetes.io/ssl-redirect: "true"
spec:
  tls:
    - hosts:
        - 192.168.1.1  # 直接用访问IP作为Host
      secretName: my-secret
  rules:
    - host: 192.168.1.1  # 规则也匹配这个IP的Host头
      http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: my-cluster-service
                port:
                  number: 80

3. 应用配置并验证

# 应用Ingress配置
kubectl apply -f ingress.yaml

# 测试HTTPS访问(--insecure跳过自签证书验证)
curl -v https://192.168.1.1 --insecure

关键注意事项

  • 确保192.168.1.1是NGINX Ingress Controller的Service IP(比如内部LoadBalancer IP或者NodePort映射的节点IP)。
  • 如果你的Kubernetes集群版本较旧,可能需要用extensions/v1beta1作为Ingress的apiVersion,但强烈建议升级到networking.k8s.io/v1(K8s 1.19+支持)。
  • 生产环境如果需要可信证书,可以用私有CA签发证书,避免客户端出现证书警告。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 18:17:45