我在两个kubernetes集群上都有一个ISTIO作为复制控制平面。就我而言,某些网络策略限制了标记的部署对象访问,但是这些策略仅在一个集群上起作用。
如何在Istio上的两个集群之间实现域和服务限制?你有什么建议吗?
谢谢
示例网络策略:
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: policy-new
namespace: point-1
spec:
ingress:
- from:
- podSelector:
matchLabels:
run: app2
podSelector:
matchLabels:
run: app
答案 0 :(得分:0)
Kubernetes NetworkPolicy
对于多集群的使用可能有限。
最好使用Istio的AuthorizationPolicy
。根据istio文档:
要配置Istio授权策略,请创建一个
AuthorizationPolicy
resource。授权策略包括选择器和规则列表。选择器指定策略适用的目标,而规则指定谁可以在条件下执行做什么。强>。具体来说:
- 目标是指
selector
中的AuthorizationPolicy
部分。- 谁是指
from
的{{1}}中的rule
部分。- 什么是指
AuthorizationPolicy
的{{1}}中的to
部分。- 条件是指
rule
的{{1}}中的AuthorizationPolicy
部分。每个规则都有以下标准字段:
when
:来源列表。rule
:操作列表。AuthorizationPolicy
:自定义条件列表。以下示例显示了一个
from
,它允许两个源(服务帐户to
和名称空间when
)访问带有标签AuthorizationPolicy
和cluster.local/ns/default/sa/sleep
的工作负载当使用有效的JWT令牌发送请求时,在foo名称空间中。
dev
我还建议阅读this和this的istio博客文章,其中涉及多集群安全性,以及有关Admiral的istio-ecosystem开源项目,该项目提供自动配置生成,同步和多集群Istio服务网格的服务发现。
除我们使用app: httpbin
,version: v1
和apiVersion: security.istio.io/v1beta1
kind: AuthorizationPolicy
metadata:
name: httpbin
namespace: foo
spec:
selector:
matchLabels:
app: httpbin
version: v1
rules:
- from:
- source:
principals: ["cluster.local/ns/default/sa/sleep"]
- source:
namespaces: ["dev"]
to:
- operation:
methods: ["GET"]
when:
- key: request.auth.claims[iss]
values: ["https://accounts.google.com"]
对象指定的流量外,可以将“ Ambassador”配置为锁定通信。
希望这会有所帮助。