文章目录
1、隔离模型
2、创建命名空间
创建明明空间sub1和sub2,分别打上对应标签ns:sub1和 ns:sub2
apiVersion: v1
kind: Namespace
metadata:
name: sub1
labels:
ns: sub1
---
apiVersion: v1
kind: Namespace
metadata:
name: sub2
labels:
ns: sub2
3、创建网络访问策略
.spec.PodSelector
顾名思义,它是pod选择器,基于标签选择与Network Policy处于同一namespace下的pod,如果pod被选中,则对其应用Network Policy中定义的规则。此为可选字段,当没有此字段时,表示选中所有pod。
.spec.PolicyTypes
Network Policy定义的规则可以分成两种,一种是入pod的Ingress规则,一种是出pod的Egress规则。本字段可以看作是一个开关,如果其中包含Ingress,则Ingress部分定义的规则生效,如果是Egress则Egress部分定义的规则生效,如果都包含则全部生效。当然此字段也可选,如果没有指定的话,则默认Ingress生效,如果Egress部分有定义的话,Egress才生效。怎么理解这句话,下文会提到,没有明确定义Ingress、Egress部分,它也是一种规则,默认规则而非没有规则。
.spec.ingress与.spec.egress
前者定义入pod规则,后者定义出pod规则,详细参考这里,这里只讲一下重点。上例中ingress与egress都只包含一条规则,两者都是数组,可以包含多条规则。当包含多条时,条目之间的逻辑关系是“或”,只要匹配其中一条就可以。.spec.ingress[].from
也是数组,数组成员对访问pod的外部source进行描述,符合条件的source才可以访问pod,有多种方法,如示例中的ip地址块、名称空间、pod标签等,数组中的成员也是逻辑或的关系。spec.ingress[].from.prots表示允许通过的协议及端口号。
.spec.egress.to定义的是pod想要访问的外部destination,其它与ingress相同。
.spec.ingress.to.namespaceSelector
namespace选择器,可以通过labels进行选择,此networkpolicy所属namespace下所有pod可以访问被选中的namespace下的pod
.spec.ingress.from.namespaceSelector
namespace选择器,可以通过labels进行选择,此networkpolicy所属namespace下所有pod可以被选中的namespace下的pod访问
1、为default创建访问策略
default中所有pod
只支持外网的入网和出网
屏蔽所有内网的出网和入网
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: default
spec:
podSelector: {
}
ingress:
- from:
- ipBlock:
cidr: 0.0.0.0/0
except:
- 172.1.0.0/12
egress:
- to:
- ipBlock:
cidr: 0.0.0.0/0
except:
- 172.1.0.0/12
policyTypes:
- Egress
- Ingress
2、为sub1和sub2创建访问策略
sub1和sub2相同
相比于default的访问策略
sub1和sub2中同一命名空间之中的pod可以相互访问
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: sub1
namespace: sub1
s