如何在 Kubernetes 中将与服务的连接限制为 pods 列表?
How do I restrict connections to a service to a list of pods in Kubernetes?
我有一个包含三个 pods(部署)app01
、app02
和 db
的名称空间。 db
通过名为 dbsvc
的 ClusterIP
服务在集群中公开。我使用像 dbsvc.namespace.svc.cluster.local
这样的集群 DNS 从 app01
和 app02
连接到服务。但是,我不希望任何人从我的命名空间之外访问 dbsvc
。 (因为它是 ClusterIP,无论如何都无法在集群外访问)。
换句话说,我只想限制 app01
和 app02
对 dbsvc.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
我有一个包含三个 pods(部署)app01
、app02
和 db
的名称空间。 db
通过名为 dbsvc
的 ClusterIP
服务在集群中公开。我使用像 dbsvc.namespace.svc.cluster.local
这样的集群 DNS 从 app01
和 app02
连接到服务。但是,我不希望任何人从我的命名空间之外访问 dbsvc
。 (因为它是 ClusterIP,无论如何都无法在集群外访问)。
换句话说,我只想限制 app01
和 app02
对 dbsvc.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