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

在Kubernetes中使用集群本地DNS调用API遇混合内容错误求助

解决Kubernetes集群内React前端调用后端API的混合内容错误

核心问题

前端页面通过HTTPS加载(https://masd.amea.xyz.com/),但调用了HTTP协议的集群内部Service,触发浏览器的混合内容安全拦截,导致请求被阻止。

可行解决方案

1. 为后端Service配置内部HTTPS

  • 生成集群内可信任的SSL证书:用cert-manager签发基于集群根CA的证书,将CA证书注入前端容器的信任存储,确保前端能识别后端证书
  • 后端服务开启HTTPS监听:修改后端应用配置,启用HTTPS端口(如443)并加载证书文件
  • 更新Service配置:将Service的端口映射指向后端的HTTPS端口
  • 前端调用地址改为:https://microservice-svc.masd.svc.cluster.local:443/users/getalluser

2. 用Ingress做路径转发(推荐生产使用)

通过Ingress把前端域名的API路径转发到后端Service,全程走HTTPS,彻底避免跨协议问题:

  • 确保集群已部署Ingress Controller(如NGINX Ingress)
  • 配置Ingress规则,示例如下:
    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: masd-api-ingress
      namespace: masd
      annotations:
        nginx.ingress.kubernetes.io/rewrite-target: /$2
    spec:
      tls:
      - hosts:
        - masd.amea.xyz.com
        secretName: masd-tls-secret # 与前端HTTPS证书一致的Secret
      rules:
      - host: masd.amea.xyz.com
        http:
          paths:
          - path: /api(/|$)(.*)
            pathType: Prefix
            backend:
              service:
                name: microservice-svc
                port:
                  number: 8080
    
  • 前端调用API时使用相对路径:/api/users/getalluser,请求会通过前端的HTTPS域名转发到后端,完全符合浏览器安全规则

3. 临时测试方案(禁止生产使用)

仅用于本地开发测试时,可临时禁用浏览器的混合内容拦截:

  • Chrome浏览器地址栏输入chrome://flags/#allow-insecure-localhost,启用对应选项
  • 该方案仅适用于测试场景,不能用于生产环境

为什么LoadBalancer方案不推荐

通过LoadBalancer暴露后端到公网DNS会额外引入外部网络链路开销,且增加不必要的公网暴露面,存在安全隐患。集群内部服务优先通过Ingress或内部HTTPS通信才是更高效、安全的方案。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 12:57:39