Istio仅允许来自特定名称空间的服务的传入流量

问题描述 投票:1回答:2

我们希望Istio仅允许来自特定命名空间的服务的传入流量。我们怎么能用Istio做到这一点?我们正在运行Istio 1.1.3版本。

更新:

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: test-app-ingress
  namespace: test-ns
spec:
  podSelector:
    matchLabels:
      app: testapp
  ingress:
  - ports:
    - protocol: TCP
      port: 80
    from:
    - podSelector:
        matchLabels:
          istio: ingress

这不起作用我也能从其他名称空间访问该服务。接下来我试过:

apiVersion: "rbac.istio.io/v1alpha1"
kind: ServiceRole
metadata:
  name: external-api-caller
  namespace: test-ns
spec:
  rules:
  - services: ["testapp"]
    methods: ["*"]
    constraints:
    - key: "destination.labels[version]"
      values: ["v1", "v2"]
---
apiVersion: "rbac.istio.io/v1alpha1"
kind: ServiceRoleBinding
metadata:
  name: external-api-caller
  namespace: test-ns
spec:
  subjects:
  - properties:
      source.namespace: "default"
  roleRef:
    kind: ServiceRole
    name: "external-api-caller"

我能够从所有命名空间访问该服务。在我预期的地方,只允许从“默认”命名空间

istio
2个回答
0
投票

我不确定这是否可以用于特定的命名空间,但它可以在标签上使用。

您可以在Istio中创建网络策略,这在Traffic Routing in Kubernetes via Istio and Envoy Proxy上有很好的解释。

...
  ingress:
  - from:
    - podSelector:
        matchLabels:
          zone: trusted
...

在示例中,只允许带有标签zone: trusted的pod与pod进行传入连接。

你可以读一下Using Network Policy with Istio

我还建议阅读Security Concepts in Istio以及Denials and White/Black Listing

希望这有助于你。

© www.soinside.com 2019 - 2024. All rights reserved.