如何在 Kubernetes 中将与服务的连接限制为 pods 列表?

How do I restrict connections to a service to a list of pods in Kubernetes?

我有一个包含三个 pods(部署)app01app02db 的名称空间。 db 通过名为 dbsvcClusterIP 服务在集群中公开。我使用像 dbsvc.namespace.svc.cluster.local 这样的集群 DNS 从 app01app02 连接到服务。但是,我不希望任何人从我的命名空间之外访问 dbsvc。 (因为它是 ClusterIP,无论如何都无法在集群外访问)。

换句话说,我只想限制 app01app02dbsvc.namespace.svc.cluster.local 的访问。

如何实现?

可以使用 Network Policy on a cluster using a network plugin (CNI) that supports them, like calico.

限制网络流量

策略选择器是特定于部署的,因此这里有一些示例值:

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: app-network-policy
  namespace: namespace
spec:
  podSelector:
    matchLabels:
      role: db
  policyTypes:
  - Ingress
  ingress:
  - from:
    - namespaceSelector:
        matchLabels:
          project: myproject
    - podSelector:
        matchLabels:
          role: app
    ports:
    - protocol: TCP
      port: 3306