Istio出站HTTPS访问失败 如何配置放行所有外部出站流量
Istio全局放行所有出站流量配置方案
问题核心原因
Istio 1.14版本默认的出站流量管控模式为REGISTRY_ONLY,该模式下sidecar代理仅放行已注册到网格服务注册表的出站流量,未注册的外部服务请求会被拦截。手动创建Google对应的ServiceEntry后流量恢复,本质就是将该外部服务加入了网格放行注册表。
方案1:修改全局出站策略为ALLOW_ANY(最简便)
该方案直接修改Istio全局配置,让sidecar默认放行所有未匹配注册表规则的出站流量,无需逐个为外部服务创建ServiceEntry。
操作步骤:
- 执行命令编辑Istio系统命名空间下的全局配置ConfigMap:
kubectl edit configmap istio -n istio-system
- 在
data.mesh配置段中添加/修改出站策略配置:
outboundTrafficPolicy: mode: ALLOW_ANY
配置保存后等待10-20秒,所有sidecar会自动同步规则,无需重启业务Pod,所有外部HTTP、HTTPS请求即可正常访问。
方案2:创建通配符ServiceEntry(不修改全局默认策略时使用)
如果不想改动Istio全局默认的REGISTRY_ONLY模式,可以创建一个匹配所有外部域名的通配ServiceEntry,实现同样的全局放行效果:
apiVersion: networking.istio.io/v1alpha3 kind: ServiceEntry metadata: name: allow-all-external spec: hosts: - "*" ports: - number: 80 name: http protocol: HTTP - number: 443 name: https protocol: HTTPS resolution: NONE location: MESH_EXTERNAL
直接将上述资源apply到集群即可生效。如果需要放行其他端口的外部访问,直接在ports列表中追加对应端口的配置项即可。
注意:以上两种全局放行方案都会弱化Istio的出站流量管控能力,若生产环境有安全、合规层面的细粒度管控要求,建议按需创建对应外部服务的ServiceEntry,或配合Sidecar自定义资源做工作负载/命名空间级的精细化放行规则,不建议长期全局放开所有出站流量。
内容的提问来源于stack exchange,提问作者Bogdan993
相关产品推荐
相关产品推荐

