calico
Posted 滴滴滴--你不是爱拖延,而是爱逃避
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了calico相关的知识,希望对你有一定的参考价值。
ubernetes提供了namesapce,用来做多租户隔离,但是如果不配置网络策略,namespace的隔离也仅仅是作用于在kubernetes编排调度时的隔离,实际上不同namespace下的pod还是可以相互串通的。此时就需要使用Kubernetes提供的networkPolicy,用于隔离不同租户的应用并减少攻击面。networkpolicy通过标签选择器来模拟传统的网络物理隔离,并通过不同的策略完成访问方向的管控。
环境
- Kubernetes 1.10.2
- Calico 3.1.0
步骤
calico 预先已部署完毕,参考官网即可,没有特殊配置
(下述代码中类似的均只写一份)
-
创建两个namespace: test1-ns test2-ns
test1-ns.yml
apiVersion:v1
kind: Namespace
metadata:
name: test1-ns
labels:
project: test1-ns
-
分别在两个namespace下创建pod: test1.yml test2.yml
test1.yml
apiVersion: apps/v1beta1 kind: Deployment metadata: name: test1 namespace: test1-ns spec: replicas: 1 selector: matchLabels: app: test1 template: metadata: name: test1 labels: app: test1 project: test1-ns spec: containers: - name: test1 image: hub.xxxxxxxx.com.cn/private/caiyt/hello:1.0.0 imagePullPolicy: IfNotPresent ports: - containerPort: 8080 --- apiVersion: v1 kind: Service metadata: name: test1 namespace: test1-ns spec: selector: app: test1 type: NodePort ports: - name: test1-http port: 8080 targetPort: 8080 nodePort: 30451
-
测试互访
目前可以看到,test1和test2是可以互相连通的
-
创建networkPolicy.yml
apiVersion: networking.k8s.io/v1 metadata: name: test namespace: test1-ns spec: podSelector: matchLabels: project: test1-ns ingress: - from: - namespaceSelector: matchLabels: project: test1-ns
-
测试联通性
因为针对test1的namespace做了策略限制,可见到由其他的命名空间中的pod无法访问test1-ns中的pod,但是反向即可。
-
外网访问测试
- ipBlock: cidr: 10.20.1.0/24
添加calico所创建tunl0@NONE网段访问策略后,外网访问可成功
以上是关于calico的主要内容,如果未能解决你的问题,请参考以下文章
Calico 网络故障排查 calico/node is not ready: BIRD is not ready(指定Calico匹配网桥规则)