使用k8s网络策略或calico,我只能将这些工具用于Pod到Pod群集网络策略。 我已经有用于外部群集策略的网络规则。
例如,如果我应用此印花布规则:
apiVersion: projectcalico.org/v3
kind: NetworkPolicy
metadata:
name: allow-ingress-from-b
namespace: app
spec:
selector: app == 'a'
ingress:
- action: Allow
protocol: TCP
source:
selector: app == 'b'
destination:
ports:
- 80
在此示例中,我允许流量从应用B到应用A。 但这将禁止其他进入A的入口流量。 只能在Pod之间应用此规则吗?
答案 0 :(得分:2)
您应该阅读The NetworkPolicy resource,它提供了一个带有Ingress
和Egress
的示例NetworkPolicy。
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: test-network-policy
namespace: default
spec:
podSelector:
matchLabels:
role: db
policyTypes:
- Ingress
- Egress
ingress:
- from:
- ipBlock:
cidr: 172.17.0.0/16
except:
- 172.17.1.0/24
- namespaceSelector:
matchLabels:
project: myproject
- podSelector:
matchLabels:
role: frontend
ports:
- protocol: TCP
port: 6379
egress:
- to:
- ipBlock:
cidr: 10.0.0.0/24
ports:
- protocol: TCP
port: 5978
解释如下:
- 针对入口和出口流量(如果尚未隔离)在“默认”名称空间中隔离“ role = db”窗格
(入口规则)允许从以下端口连接到TCP端口6379上带有“ role = db”标签的“默认”名称空间中的所有Pod:
- “默认”名称空间中带有标签“ role = frontend”的任何吊舱
- 名称空间中带有标签“ project = myproject”的任何吊舱
- IP地址在172.17.0.0–172.17.0.255和172.17.2.0–172.17.255.255之间(即,除了172.17.1.0/24外,全部为172.17.0.0/16)
- (出口规则)允许从“默认”名称空间中带有标签“ role = db”的任何Pod连接到TCP端口5978上的CIDR 10.0.0.0/24
有关更多示例,请参见Declare Network Policy演练。
因此,如果您使用podSelector
,则可以选择要应用此网络策略的广告连播。