首页 > 其他分享 >K8S API资源对象NetworkPolicy

K8S API资源对象NetworkPolicy

时间:2023-05-11 11:46:04浏览次数:45  
标签:kubectl NetworkPolicy busybox -- API aming 命名 Pod K8S

NetworkPolicy用来控制Pod与Pod之间的网络通信,它也支持针对Namespace进行限制。基于白名单模式,符合规则的对象通过,不符合的拒绝。应用场景举例:

  • Pod A不能访问Pod B;
  • 开发环境所有Pod不能访问测试命名空间;
  • 提供对外访问时,限制外部IP;
官方NetworkPolicy YAML示例:
apiVersion: networking.k8s.io/v1kind: NetworkPolicymetadata:  name: test-network-policy  namespace: defaultspec:  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
说明:必需字段:apiVersion、 kind 和 metadata 字段。
  • podSelector:定义目标Pod的匹配标签,即哪些Pod会生效此策略;
  • policyTypes:表示给定的策略是应用于目标Pod的入站流量(Ingress)还是出站流量(Egress),或两者兼有。如果NetworkPolicy未指定policyTypes则默认情况下始终设置Ingress。
  • ingress:定义入流量限制规则,from用来定义白名单对象,比如网段、命名空间、Pod标签,Ports定义目标端口。
  • egress:定义出流量限制规则,定义可以访问哪些IP和端口
案例一:需求:aming命名空间下所有Pod可以互相访问,也可以访问其他命名空间Pod,但其他命名空间不能访问aming命名空间Pod。首先创建几个Pod:
kubectl run busybox --image=busybox -- sleep 3600  ## default命名空间里创建busybox Podkubectl run busybox --image=busybox -n aming -- sleep 3600    ## aming命名空间里创建busybox Podkubectl run web --image=nginx:1.23.2 -n aming  ## aming命名空间里创建web pod
在没有创建NetworkPolicy的情况下测试
kubectl exec busybox -n aming -- ping 10.18.235.161  ##aming命名空间的busybox ping default命名空间的busybox IP kubectl exec busybox -n aming -- ping 10.18.235.162 ##aming命名空间的busybox ping aming命名空间的web IPkubectl exec busybox -- ping 10.18.235.162 ##default命名空间的busybox ping aming命名空间的web IP
创建networkpolicy的YAML
vi  deny-all-namespaces.yaml  ##内容如下apiVersion: networking.k8s.io/v1kind: NetworkPolicymetadata:  name: deny-all-namespaces  namespace: amingspec:  podSelector: {} # 为空,表示匹配本命名空间所有Pod  policyTypes:  - Ingress  ingress:    - from:      - podSelector: {} # 为空,表示匹配该命名空间所有Pod,即允许该命名空间所有Pod访问,没有定义namespaceSelector,也就是说不允许其它namespace的Pod访问。
应用YAML
kubectl apply -f deny-all-namespaces.yaml
测试:
kubectl exec busybox -n aming -- ping 10.18.235.161  ##aming命名空间的busybox ping default命名空间的busybox IPkubectl exec busybox -n aming -- ping 10.18.235.162 ##aming命名空间的busybox ping aming命名空间的web IPkubectl exec busybox -- ping 10.18.235.162 ##default命名空间的busybox ping aming命名空间的web IP
将刚刚创建的所有资源删除:
kubectl delete po busybox  --forcekubectl delete po busybox -n aming --forcekubectl delete po web -n amingkubectl delete -f deny-all-namespaces.yaml
案例二:通过PodSelector限制
vi pod-selector.yaml  ##内容如下apiVersion: networking.k8s.io/v1kind: NetworkPolicymetadata:  name: app-to-app  namespace: amingspec:  podSelector:    matchLabels:      app: test  policyTypes:    - Ingress  ingress:    - from:        - podSelector:            matchLabels:              app: dev      ports:        - protocol: TCP          port: 80
应用YAML
kubectl apply -f pod-selector.yaml
创建测试pod
kubectl run web01 --image=nginx:1.23.2 -n aming -l 'app=test'  #创建Pod时,指定labelkubectl get pod web01 -n aming --show-labels # 查看label# 如果label创建错了,也可以修改,在本实验中不需要做如下操作# kubectl label pod busybox app=test123 --overwrite kubectl run app01 --image=nginx:1.23.2 -n aming -l 'app=dev' kubectl run app02 --image=nginx:1.23.2 -n aming
查看web01的IP
kubectl describe po web01 -n aming |grep -i ip
测试
kubectl exec -n aming app01 -- curl 10.18.235.170kubectl exec -n aming app02 -- curl 10.18.235.170
测试成功后,删除掉刚刚创建的资源
kubectl delete po app01 -n amingkubectl delete po app02 -n amingkubectl delete po web01 -n amingkubectl delete -f pod-selector.yaml
案例三:限制namespace
vi allow-ns.yaml  #内容如下apiVersion: networking.k8s.io/v1kind: NetworkPolicymetadata:  name: allow-ns  namespace: amingspec:  podSelector: {}  policyTypes:    - Ingress  ingress:    - from:        - namespaceSelector:            matchLabels:              name: test      ports:        - protocol: TCP          port: 80
应用YAML
kubectl apply -f allow-ns.yaml
创建测试ns 
kubectl create ns test
创建测试pod
kubectl run web01 --image=nginx:1.23.2 -n amingkubectl run web02 --image=nginx:1.23.2 -n testkubectl run web03 --image=nginx:1.23.2 kubectl run web04 --image=nginx:1.23.2 -n aming
查看web01的IP
kubectl describe po web01 -n aming |grep -i ip
查看ns label
kubectl get ns --show-labels
给ns设置标签
kubectl label namespace test name=test
测试:
kubectl -n test exec web02 -- curl 10.18.235.172  #可以访问kubectl exec web03 -- curl 10.18.235.172 #不可以访问kubectl -n aming exec web04 -- curl 10.18.235.172  #不可以访问,即使同一个命名空间也无法访问

以上为NetworkPolicy的主要内容,你看明白了吗?

标签:kubectl,NetworkPolicy,busybox,--,API,aming,命名,Pod,K8S
From: https://www.cnblogs.com/msjhw/p/17390583.html

相关文章

  • Zookeeper_java_API的简介
    1.Zookeeper_java_API的简介1.1)org.apache.zookeeper.ZookeeperZookeeper是在Java客户端主类,负责建立与zookeeper集群的会话,并提供方法进行操作。1.2)org.apache.zookeeper.WatcherWatcher接口表示一个标准的事件处理器,其定义了事件通知相关的逻辑,包含KeeperState和EventType两......
  • APISIX部署
    1.安装依赖#安装epel,`luarocks`需要它wgethttp://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpmsudorpm-ivhepel-release-latest-7.noarch.rpm#添加OpenResty源sudoyuminstallyum-utilssudoyum-config-manager--add-repohttps://ope......
  • 百度地图开发api
     获取百度地图ak:https://zhuanlan.zhihu.com/p/574521243 引入依赖:<!--引入HttpClient依赖--><dependency><groupId>org.apache.httpcomponents</groupId><artifactId>httpclient</artifactId><version>4.5.3</version></......
  • 第9周-elk-k8s网络
    一、日志收集案例-容器内置日志收集收集架构应用程序以tomcat为例1构建镜像DockerfileFROMharbor.jackedu.net/baseimage/tomcat-base:v8.5.43ADDcatalina.sh/apps/tomcat/bin/catalina.shADDserver.xml/apps/tomcat/conf/server.xml#ADDmyapp/*/data/tomcat/we......
  • 获取采购信息记录函数BAPI_INFORECORD_GETLIST
    DATA:lt_purchTYPETABLEOFbapieine,lt_returnTYPETABLEOFbapireturn.FIELD-SYMBOLS:<fs_return>TYPEbapireturn,<fs_purch>TYPEbapieine.CALLFUNCTION'BAPI_INFORECORD_GETLIST'EXPORTING......
  • k8s认证、授权与准入控制
    KubernetesAPIServer是Kubernetes集群的控制中心,提供了KubernetesAPI的访问入口。为了保证Kubernetes集群的安全性,Kubernetes提供了许多APIServer访问控制机制,如下所示:认证(Authentication):APIServer可以支持多种身份认证方式,如证书、静态令牌、动态令牌(Token)和......
  • k8s 部署 elasticsearch 单节点
    es.yaml#pv和pvcapiVersion:v1kind:PersistentVolumemetadata:name:es-pvspec:capacity:storage:5GiaccessModes:-ReadWriteManypersistentVolumeReclaimPolicy:RetainstorageClassName:es-hosthostPath:path:/data/es-data---......
  • 太懂用户了!Apipost这次更新属实把我拿捏了
    Apipost最近更新了v7.1.4版本简直是功能大杀器啊,一堆亮点!喂,postman?别给我打电话了,我怕Apipost误会!咱就是说:一次更新这么多功能谁见了不得用两下?更何况是我这么喜欢折腾的。少废话,先看东西!Apipost也是把颜色玩明白了,一下子支持了7种主题色选择,哥们最喜欢绿色,而且还非常贴心的做......
  • 全网商品搜索|1688|Taobao|天猫|京东api接口展示示例
    ​电商API(ApplicationProgrammingInterface,应用程序编程接口)是指电商平台开放的一组数据接口,通过这些接口可以实现对电商平台商品、订单、物流等信息进行访问、查询、修改、删除等操作。电商API涉及到的主要数据包括:1.商品数据:包括商品名称、价格、库存、分类、描述、图片......
  • 调用openAI API出现429错误
    如果不是请求太频繁的话,请检查一下自己账号Usage的期限 openAI给每个账号18美刀、三个月的免费用量,所以过期了就会报429错误......