Örnek - namespaceSelector ve podSelector AND ve OR farkı
Açıklaması şöyle
For example, the following NetworkPolicy allows traffic from all Pods in the my-ns namespace that have a role: app label OR from all Pods in any namespaces that have a somelabel: myvalue label:
Şöyle yaparız. Burada 2 tane kural "-" ile veriliyor
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: test-networkpolicy1
namespace: my-ns
spec:
podSelector:
matchLabels:
role: db
policyTypes:
- Ingress
ingress:
- from:
- namespaceSelector:
matchLabels:
somelabel: myvalue
- podSelector:
matchLabels:
role: app
ports:
- protocol: TCP
port: 80Açıklaması şöyle.
However, a slightly different NetworkPolicy would allow traffic only from Pods that themselves have a label role: app AND that are in namespaces that have a somelabel: myvalue label:
Şöyle yaparız. Burada 1 tane kural "-" ile veriliyor.
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: test-networkpolicy2
namespace: my-ns
spec:
podSelector:
matchLabels:
role: db
policyTypes:
- Ingress
ingress:
- from:
- namespaceSelector:
matchLabels:
somelabel: myvalue
podSelector:
matchLabels:
role: app
ports:
- protocol: TCP
port: 80Kubernetes v1.21'den sonra otomatik olarak kubernetes.io/metadata.name diye bir label yaratılıyor. Label'ın varsayılan değeri namespace ismi. Şöyle yaparız. Yani fazladan label vermeye gerek yok.
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: test-network-policy
namespace: my-app-ns
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:
kubernetes.io/metadata.name: my-client-ns
podSelector:
matchLabels:
role: frontend
ports:
- protocol: TCP
port: 6379
egress:
- to:
- ipBlock:
cidr: 10.0.0.0/24
ports:
- protocol: TCP
port: 5978Örnek - Don’t combine disparate NetworkPolicies
Elimizde şöyle bir policy olsun
# This is bad because it grants access to more than it should
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: egress-network-policy
namespace: my-ns
spec:
policyTypes:
- Egress
podSelector: {}
egress:
- to:
- namespaceSelector:
matchLabels:
kubernetes.io/metadata.name: kube-system
podSelector:
matchLabels:
k8s-app: kube-dns
- ipBlock:
cidr: 93.184.216.34/32
ports:
- port: 53
protocol: UDP
- port: 53
protocol: TCP
- port: 80
protocol: TCPBurada hem DNS pod'un 53 ve 80 hem de 93.184.216.34/32 adresinin 53 ve 80 portlarına izin veriliyor. Ancak istenen aslında DNS pod'un 53 portuna, 93.184.216.34/32 adresinin de 80 portuna izin vermek. Doğrusu şöyle
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: allow-allpods-to-dns
namespace: my-ns
spec:
policyTypes:
- Egress
podSelector: {}
egress:
- to:
- namespaceSelector:
matchLabels:
kubernetes.io/metadata.name: kube-system
podSelector:
matchLabels:
k8s-app: kube-dns
ports:
- port: 53
protocol: UDP
- port: 53
protocol: TCPve şöyle
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: allow-cronjob-to-examplecom
namespace: my-ns
spec:
podSelector:
matchLabels:
app.kubernetes.io/component: cronjob
policyTypes:
- Egress
egress:
- to:
- ipBlock:
cidr: 93.184.216.34/32
ports:
- protocol: TCP
port: 80
Hiç yorum yok:
Yorum Gönder