HAOJX

基于canel的网络策略

字数统计: 644阅读时长: 2 min
2018/11/15 Share

Installing Calico for policy and flannel for networking

If your cluster has RBAC enabled, issue the following command to configure the roles and bindings that Calico requires.

1
2
kubectl apply -f \
https://docs.projectcalico.org/v3.2/getting-started/kubernetes/installation/hosted/canal/rbac.yaml

Issue the following command to install Calico.

1
2
kubectl apply -f \
https://docs.projectcalico.org/v3.2/getting-started/kubernetes/installation/hosted/canal/canal.yaml

查看网络怎么定义

1
kubectl explain networkplocy

实验前提

先创建2个名称空间

1
2
kubectl create namespace dev
kubectl create namespace prod

ingress进站规则

创建一条ingress规则

vim ingress-def.yaml

1
2
3
4
5
6
7
8
apiVersion: networking.k8s.io/v1
kind: NetworkPlicy
metadata:
name: deny-all-ingress
spec:
podSelector: {}
plicyTypes:
- Ingress
1
kubectl apply -f ingress-def.yaml -n dev   //在dev名称空间下生效

查看刚刚创建的规则

1
kubectl get netpol -n dev

创建一个测试用的pod

1
2
3
4
5
6
7
8
9
10
vim pod-dev-test.yaml

apiVersion: v1
kind: Pod
metadata:
name: pod-dev-test
spec:
containers:
- name: myapp
image: ikubernetes/myapp:v1
1
kubectl apply -f pod-dev-test.yaml -n dev
查看这个pod并访问
1
kubectl get pods -n dev -o wide   //找到这个pod的IP并用curl访问 , 发现并不能访问, 因为刚刚定义的ingress规则就是拒绝所有访问
同样的把这个pod部署在名称空间为prod 下, 就不会有这种情况
1
kubectl apply -f pod-dev-test.yaml -n prod
查看这个pod并访问
1
kubectl get pods -n prod -o wide   //找到这个pod的IP并用curl访问 , 可以访问, 因为我们没有在这个空间下定义ingress拒绝所有的规则

更改ingress规则

vim ingress-def.yaml

1
2
3
4
5
6
7
8
9
10
apiVersion: networking.k8s.io/v1
kind: NetworkPlicy
metadata:
name: allow-all-ingress
spec:
podSelector: {}
ingress:
- {}
plicyTypes:
- Ingress
1
kubectl apply -f ingress-def.yaml -n dev //将刚刚修改完的规则放在dev下生效

查看这个pod并访问

1
kubectl get pods -n dev -o wide   //找到这个pod的IP并用curl访问 , 这回发现就可以访问了

控制特定网段和端口的ingress进站访问

先把之前定义的pod先打标签

1
kubectl label pods pod-dev-test app=myapp -n dev

vim allow-netpol-demo.yaml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: allow-myapp-ingress
spec:
podSelector:
matchLabels:
app: myapp
ingress:
- from:
- ipBlock:
cidr: 10.244.0.0/16
except:
- 10.244.1.2/32
ports:
- protocol: TCP
port: 80
1
kubectl apply -f allow-netpol-demo.yaml -n dev

查看pod并访问

1
kubectl get pods -n dev -o wide  //查看pod地址并访问 , 发现除了10.244.1.2访问不了, 其他都可以 , 而且 端口也只能访问80 , 其他端口不能访问

综上:

ingress规则如果没有显示的定于出来 , 那么就是默认拒绝所有 在policytypes中没有规定的策略 那么就是接受所有

对于名称空间

拒绝所有出入站

放行出入站为本名称空间的所有pod

对于跨名称空间来说 再单独定义

定义egress规则

玩法同ingress相同

CATALOG
  1. 1. Installing Calico for policy and flannel for networking
    1. 1.1. 实验前提
  • ingress进站规则
    1. 1. 创建一条ingress规则
      1. 1.1. 查看刚刚创建的规则
      2. 1.2. 创建一个测试用的pod
        1. 1.2.1. 查看这个pod并访问
        2. 1.2.2. 同样的把这个pod部署在名称空间为prod 下, 就不会有这种情况
        3. 1.2.3. 查看这个pod并访问
    2. 2. 更改ingress规则
      1. 2.1. 查看这个pod并访问
    3. 3. 控制特定网段和端口的ingress进站访问
  • 定义egress规则