我需要在命名空间之间隔离k8s荚网络。
在命名空间ns-1中运行的ns-1不能从名称空间ns-2中的pod-2访问网络。
它的目的是在名称空间之间创建一个沙箱,并防止基于it标签的特定荚之间的网络通信。
我试着用NetworkPolicy来做这件事,但我对k8s的了解有点“粗糙”。
这个是可能的吗?有人能举个例子吗?
我试图阻止所有内部网通信,并允许互联网使用以下内容:
spec:
egress:
- ports:
- port: 53
protocol: UDP
to:
- ipBlock:
cidr: 0.0.0.0/0
except:
- 10.0.0.0/8
- 192.168.0.0/16
- 172.16.0.0/12
- 172.40.0.0/16
- namespaceSelector: {}
podSelector:
matchLabels:
k8s-app: kube-dns
podSelector:
matchExpressions:
- key: camel.apache.org/integration
operator: Exists
policyTypes:
- Egress但是,当我访问类似于google.com的内容时,它正确地解析了DNS,但没有连接导致超时。
政策意图是:
我做错了什么?
发布于 2022-03-16 10:03:57
网络策略的设置非常灵活,您可以以不同的方式配置它。如果我们查看您的情况,那么您必须为您的集群创建2个策略。首先,它是您的产品的命名空间网络策略,其次是您的沙箱。当然,在开始修改您的网络之前,请确保选择、安装和配置网络提供程序。 --这是NetworkPolicy .yaml文件的示例,用于隔离您的名称NameSpace:
# You can create a "default" policy for a namespace which prevents all ingress
# AND egress traffic by creating the following NetworkPolicy in that namespace.
---
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: default-deny-all
namespace: YourSandbox
spec:
podSelector: {}
policyTypes:
- Ingress
- Egress在此之后,您可以在这个NameSpace中创建您的荚,并且它将被隔离。只需将NameSpace名称添加到配置文件字符串中:
apiVersion: apps/v1
kind: Deployment
metadata:
name: service-c
namespace: YourSandbox在本例中,我们添加了对外部和内部连接到特定NameSpace和服务的访问:
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: access-service-c
namespace: YourSandbox
spec:
podSelector:
matchLabels:
app: YourSandboxService
ingress:
- from:
- namespaceSelector:
matchLabels:
env: YourProdactionNameSpase
- podSelector:
matchLabels:
app: NameOfYourService
egress:
- to:
- namespaceSelector:
matchLabels:
name: YourProdactionNameSpase
- podSelector:
matchLabels:
app: NameOfYourService使用此网络策略ip块配置阻止默认本地专用网络ip的出口,并允许打开其余的internet访问。
egress:
- to:
- ipBlock:
cidr: 0.0.0.0/0
except: 192.168.40.0/24 #Your pul of local private network IPs如果使用子网前缀/32的长度,则表示规则的范围仅限于此一个IP地址。
https://stackoverflow.com/questions/71488645
复制相似问题