我有两个应用程序:
ns-outside-mesh
下。它的 pod 没有任何 sidecar。ns-inside-mesh
下。它的 pod 有 Istio 代理 sidecar。两个应用程序都在同一个集群中。不涉及 Ingress。它们都是集群内通信。
我通过 ssh 访问应用程序 A,并通过curl 访问服务 B,这是使用命令
curl serviceB.ns-inside-mesh.svc
与应用程序 B 关联的服务。它给了我 403 rbac 访问被拒绝,这是预期的,因为 Pod A 没有任何 Istio 代理 sidecar,它将嵌入带有必要授权信息的请求。
如何让应用程序A访问应用程序B?我不想使用 Istio Gateway,因为我不想公开公开此应用程序。我只想将其公开给同一集群内但服务网格之外的其他应用程序。
如果您对 mTLS 使用 STRICT 模式,则这是不可能的。您必须更改为 PERMISSIVE 模式,或者,如果您使用 STRICT 模式,请配置 PeerAuth 以在给定工作负载的端口级别禁用 mTLS。
编辑:或者相反,将全局 mTLS 设置为 PERMISSIVE,然后在每个主机名的目标规则 ISTIO_MUTUAL 中为您不想从 sidecar 应用程序访问的主机名启用。