Docker Calico Profiles Labels Policy

Docker Calico Profiles Labels Policy

calico 版本号:v2.6
参考文献:
https://docs.projectcalico.org/v2.6/getting-started/docker/tutorials/security-using-calico-profiles-and-policy


一、 Security using Calico Profiles

1. 创建网络

在一台服务器上(如master节点),创建net1,net2,net3

docker network create --driver calico --ipam-driver calico-ipam net1
docker network create --driver calico --ipam-driver calico-ipam net2
docker network create --driver calico --ipam-driver calico-ipam net3

2. 创建容器

在master节点上:

docker run --net net1 --name workload-A -tid busybox
docker run --net net2 --name workload-B -tid busybox
docker run --net net1 --name workload-C -tid busybox

在node2节点上:

docker run --net net3 --name workload-D -tid busybox
docker run --net net1 --name workload-E -tid busybox

说明:
A,C,E 都在同一个网络应该可以彼此互ping的
B和D都在各自的网络不能ping通任何其他节点

3. 测试容器间的连通性

在master上

docker exec workload-A ping -c 4 workload-C.net1
docker exec workload-A ping -c 4 workload-E.net1

测试workload-A容器ping workload-B容器

image

在node2上
获取workload-D的IP地址

docker inspect --format "{{ .NetworkSettings.Networks.net3.IPAddress }}" workload-D

在master节点上

image

总结:

calico网络,默认情况下,只有同一个网络内的容器是互通







二、 Security using Calico Profiles and Policy

2.1、Policy applied directly by the profile

  1. create the docker networks
    docker network create --driver calico --ipam-driver calico-ipam database
    docker network create --driver calico --ipam-driver calico-ipam frontend
    
  2. create the profiles
    vim frontend-database.yaml
    - apiVersion: v1
    kind: profile
    metadata:
        name: database
        labels:
          role: database
    spec:
        ingress:
        - action: allow
          protocol: tcp
          source:
            selector: role == 'frontend'
          destination:
            ports:
            -  2181
        - action: allow
          source:
            selector: role == 'database'
        egress:
        - action: allow
          destination:
            selector: role == 'database'
    - apiVersion: v1
    kind: profile
    metadata:
        name: frontend
        labels:
          role: frontend
    spec:
        egress:
        - action: allow
          protocol: tcp
          destination:
            selector: role == 'database'
            ports:
            -  2181
    

说明:
 A、使用database网络的容器,都带有标签role=database
 B、使用frontend网络的容器,都带有标签role=frontend
 C、database 策略中:
     a. ingress入规则定义了两个,只要满足一条规则即可访问
       规则一:(针对的是不同calico网络,访问database网络的规则)
           1. 源网络带有标签role=frontend,
           2. 访问的端口号是2181
           3. 使用tcp协议
       规则二:(针对的是同一个网络内,容器之间的访问)
           1. 带有标签role=database 也可以访问
     b.egress出规则:
         只能访问同一个网络database内的容器,其他网络里的容器不能访问
配置文件database的整体意思,就是:
A、使用同一个database网络的容器可以互相访问
B、针对外部网络,只允许frontend网络里的容器访问2181端口

  1. apply profile
    calicoctl apply -f frontend-database.yaml

2.2、test profile

  1. 在master节点上创建一个zk容器 zk.sh

    docker stop xej-zk
    docker rm xej-zk
    docker run --network=database  --name xej-zk -p 2181:2181 --restart always -d zookeeper:3.5
    
  2. 在node2节点上创建一个test-tools容器,test-tools.sh

    #!/bin/bash 
    docker stop test-tools
    docker rm test-tools
    docker run --network=frontend --name test-tools -itd --restart always busybox
    
  3. 在master节点上,查看xej-zk容器的IP地址:
    docker inspect --format "{{ .NetworkSettings.Networks.database.IPAddress }}" xej-zk
    172.20.219.118

  4. 在node2节点上,查看test-tools 容器的IP地址:
    docker inspect --format "{{ .NetworkSettings.Networks.frontend.IPAddress }}" test-tools
    172.20.104.5

  5. 在node2节点上 进入test-tools容器,测试是否能ping通master节点上的zk容器,


    image
  6. 在node2节点上,直接ping master节点上xej-zk容器,是否能ping 通?

      
    image
  7. 在master节点上,直接ping master节点上xej-zk容器,是否能ping 通?

    image

  8. 在node2节点上,进入test-tools容器,访问master节点上的2181端口,是否可以?


    image




三、 Global policy applied through label selection

3.1、 Create the Docker networks

docker network create --driver calico --ipam-driver calico-ipam db  
docker network create --driver calico --ipam-driver calico-ipam ft 

3.2、Create the profiles

为db,ft网络自定义profile,创建各自标签
pdbft.yaml
不定义规则

- apiVersion: v1
  kind: profile
  metadata:
    name: db
    labels:
      role: db
- apiVersion: v1
  kind: profile
  metadata:
    name: ft
    labels:
      role: ft

calicoctl apply -f pdbft.yaml

3.3、Create policy

通过创建全局策略,实现网络隔离
Policy资源是全局性的, 同样包括一些列的ingress和egress规则 ,
每条规则根据source和destination定义的属性进行数据包的过滤
dbft.yaml

- apiVersion: v1
  kind: policy
  metadata:
    name: db
  spec:
    order: 0
    selector: role == 'db'
    ingress:
    - action: allow
      protocol: tcp
      source:
        selector: role == 'ft'
      destination:
        ports:
        -  2181
    - action: allow
      source:
        selector: role == 'db'
    egress:
    - action: allow
      destination:
        selector: role == 'db'
- apiVersion: v1
  kind: policy
  metadata:
    name: ft
  spec:
    order: 0
    selector: role == 'ft'
    egress:
    - action: allow
      protocol: tcp
      destination:
        selector: role == 'db'
        ports:
        -  2181

3.4、apply policy

calicoctl apply -f dbft.yaml

3.5、test policy

实现的效果跟上面的测试用例是一样的


四、遗留问题?

profile资源 与 policy资源 不知何时使用?
什么场景下使用profile资源 ?
什么场景下使用policy资源
policy资源对象中的order 到底有什么用 ?

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,185评论 6 503
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,652评论 3 393
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,524评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,339评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,387评论 6 391
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,287评论 1 301
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,130评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,985评论 0 275
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,420评论 1 313
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,617评论 3 334
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,779评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,477评论 5 345
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,088评论 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,716评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,857评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,876评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,700评论 2 354