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

K8s环境下Istio服务网格HTTP转HTTPS配置全流程问题咨询

Istio服务网格HTTP转HTTPS完整落地指南

核心概念答疑

1. Istio mTLS与常规TLS的区别

  • 常规TLS为单向认证:仅服务端向客户端出示证书,客户端校验服务端身份,多用于公网HTTPS场景
  • Istio mTLS为双向认证:服务调用的两端都会向对方出示证书校验身份,完全由Sidecar代理自动完成,业务服务无感知,证书由Istio CA自动签发、轮转,无需业务维护
  • 外部客户端访问内部服务时,mTLS作用是保障Ingress网关到内部服务、以及内部服务之间的流量全程加密,避免集群内部流量被窃听篡改

2. 外部到内部流量配置逻辑

不需要修改内部服务的任何配置:

  • 无需为每个内部服务单独申请公网证书,仅需为Istio Ingress网关配置一套公网TLS证书即可
  • 内部服务继续保留80端口提供HTTP服务即可,无需切换为443端口或开启HTTPS
  • 流量链路:外部客户端 →(HTTPS,网关卸载证书)→ Istio Ingress网关 →(mTLS加密,Sidecar自动处理)→ 内部服务Sidecar →(HTTP明文)→ 业务服务

3. 证书方案选型

  • 测试/内部场景:完全可以直接用openssl生成自签名证书,创建为tls类型的Secret存放到istio-system命名空间即可,仅Ingress网关需要使用该证书,不需要多服务共用,配合kubed跨命名空间同步也没有问题
  • 生产场景:推荐部署cert-manager,部署成本仅1小时左右,可实现证书自动签发、自动续期,避免手动维护证书过期的风险,长期来看投入产出比很高

完整落地操作步骤

步骤1:开启全局mTLS

创建全局PeerAuthentication资源,强制所有服务间流量走mTLS:

apiVersion: security.istio.io/v1beta1
kind: PeerAuthentication
metadata:
  name: default
  namespace: istio-system
spec:
  mtls:
    mode: STRICT

注意:如果还有部分服务未接入Istio Sidecar,可先将模式改为PERMISSIVE,兼容未接入Sidecar的服务,待全量接入后再切换为STRICT模式。

步骤2:生成TLS证书

自签名证书生成命令:
openssl req -x509 -sha256 -nodes -days 365 -newkey rsa:2048 -keyout tls.key -out tls.crt -subj "/CN=你的业务域名/O=组织名称"
如果使用公网CA签发的证书,直接替换生成的tls.crt和tls.key即可。

步骤3:创建网关证书Secret

将证书存放到Istio网关所在的命名空间:
kubectl create secret tls istio-ingressgateway-certs --namespace istio-system --key tls.key --cert tls.crt

步骤4:配置Ingress网关开启HTTPS

apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
  name: business-gateway
  namespace: istio-system
spec:
  selector:
    istio: ingressgateway
  servers:
  # HTTPS 443端口配置
  - port:
      number: 443
      name: https
      protocol: HTTPS
    tls:
      mode: SIMPLE
      credentialName: istio-ingressgateway-certs # 关联上一步创建的Secret
    hosts:
    - "你的业务域名"
  # 可选:HTTP 80端口自动跳转到HTTPS
  - port:
      number: 80
      name: http
      protocol: HTTP
    hosts:
    - "你的业务域名"
    tls:
      httpsRedirect: true

步骤5:配置路由规则转发到内部服务

apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: business-service-vs
spec:
  hosts:
  - "你的业务域名"
  gateways:
  - istio-system/business-gateway
  http:
  - route:
    - destination:
        host: 内部服务名.服务所在命名空间.svc.cluster.local
        port:
          number: 80 # 内部服务的HTTP端口,无需修改

流量架构图示

┌─────────────────┐        HTTPS(公网证书卸载)         ┌──────────────────────┐
│ 外部客户端        ├───────────────────────────────────►│ Istio Ingress Gateway│
└─────────────────┘                                     └───────────┬──────────┘
                                                          mTLS加密(Sidecar自动处理)
                                                          ▼
┌────────────────────────────────────────────────────────────────────────────────┐
│                              K8s集群(Istio服务网格)                           │
│  ┌──────────────┐     mTLS加密      ┌──────────────┐     mTLS加密      ┌──────────────┐ │
│  │ 服务A Sidecar │◄────────────────►│ 服务B Sidecar │◄────────────────►│ 服务C Sidecar │ │
│  └──────┬───────┘                   └──────┬───────┘                   └──────┬───────┘ │
│         │ HTTP                             │ HTTP                             │ HTTP     │
│  ┌──────┴───────┐                   ┌──────┴───────┐                   ┌──────┴───────┐ │
│  │ 业务服务A     │                   │ 业务服务B     │                   │ 业务服务C     │ │
│  └──────────────┘                   └──────────────┘                   └──────────────┘ │
└────────────────────────────────────────────────────────────────────────────────────────┘

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 07:39:01