我们希望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中创建网络策略,这在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。
希望这有助于你。