Docker Calico Profiles Labels Policy

Docker Calico Profiles Labels Policy

calico 版本號:v2.6
參考文獻(xiàn):
https://docs.projectcalico.org/v2.6/getting-started/docker/tutorials/security-using-calico-profiles-and-policy


一、 Security using Calico Profiles

1. 創(chuàng)建網(wǎng)絡(luò)

在一臺服務(wù)器上(如master節(jié)點)壁却,創(chuàng)建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. 創(chuàng)建容器

在master節(jié)點上:

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節(jié)點上:

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

說明:
A,C,E 都在同一個網(wǎng)絡(luò)應(yīng)該可以彼此互ping的
B和D都在各自的網(wǎng)絡(luò)不能ping通任何其他節(jié)點

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節(jié)點上

image

總結(jié):

calico網(wǎng)絡(luò)椎工,默認(rèn)情況下钧栖,只有同一個網(wǎng)絡(luò)內(nèi)的容器是互通

?
?
?
?
?
?


二熏瞄、 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網(wǎng)絡(luò)的容器,都帶有標(biāo)簽role=database
?B驶俊、使用frontend網(wǎng)絡(luò)的容器娶耍,都帶有標(biāo)簽role=frontend
?C、database 策略中:
?????a. ingress入規(guī)則定義了兩個饼酿,只要滿足一條規(guī)則即可訪問
???????規(guī)則一:(針對的是不同calico網(wǎng)絡(luò)榕酒,訪問database網(wǎng)絡(luò)的規(guī)則)
???????????1. 源網(wǎng)絡(luò)帶有標(biāo)簽role=frontend,
???????????2. 訪問的端口號是2181
???????????3. 使用tcp協(xié)議
???????規(guī)則二:(針對的是同一個網(wǎng)絡(luò)內(nèi),容器之間的訪問)
???????????1. 帶有標(biāo)簽role=database 也可以訪問
?????b.egress出規(guī)則:
?????????只能訪問同一個網(wǎng)絡(luò)database內(nèi)的容器故俐,其他網(wǎng)絡(luò)里的容器不能訪問
配置文件database的整體意思想鹰,就是:
A、使用同一個database網(wǎng)絡(luò)的容器可以互相訪問
B药版、針對外部網(wǎng)絡(luò)杖挣,只允許frontend網(wǎng)絡(luò)里的容器訪問2181端口

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

2.2、test profile

  1. 在master節(jié)點上創(chuàng)建一個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節(jié)點上創(chuàng)建一個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節(jié)點上惩妇,查看xej-zk容器的IP地址:
    docker inspect --format "{{ .NetworkSettings.Networks.database.IPAddress }}" xej-zk
    172.20.219.118

  4. 在node2節(jié)點上,查看test-tools 容器的IP地址:
    docker inspect --format "{{ .NetworkSettings.Networks.frontend.IPAddress }}" test-tools
    172.20.104.5

  5. 在node2節(jié)點上 進(jìn)入test-tools容器筐乳,測試是否能ping通master節(jié)點上的zk容器歌殃,


    image
  6. 在node2節(jié)點上,直接ping master節(jié)點上xej-zk容器蝙云,是否能ping 通氓皱?

    ??
    image
  7. 在master節(jié)點上,直接ping master節(jié)點上xej-zk容器,是否能ping 通波材?

    image

  8. 在node2節(jié)點上股淡,進(jìn)入test-tools容器,訪問master節(jié)點上的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網(wǎng)絡(luò)自定義profile,創(chuàng)建各自標(biāo)簽
pdbft.yaml
不定義規(guī)則

- 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

通過創(chuàng)建全局策略敛瓷,實現(xiàn)網(wǎng)絡(luò)隔離
Policy資源是全局性的, 同樣包括一些列的ingress和egress規(guī)則 斑匪,
每條規(guī)則根據(jù)source和destination定義的屬性進(jìn)行數(shù)據(jù)包的過濾
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

實現(xiàn)的效果跟上面的測試用例是一樣的


四蚀瘸、遺留問題狡蝶?

profile資源 與 policy資源 不知何時使用?
什么場景下使用profile資源 ?
什么場景下使用policy資源
policy資源對象中的order 到底有什么用 苍姜?

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市悬包,隨后出現(xiàn)的幾起案子衙猪,更是在濱河造成了極大的恐慌,老刑警劉巖布近,帶你破解...
    沈念sama閱讀 218,284評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件垫释,死亡現(xiàn)場離奇詭異,居然都是意外死亡撑瞧,警方通過查閱死者的電腦和手機(jī)棵譬,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,115評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來预伺,“玉大人订咸,你說我怎么就攤上這事〕昃鳎” “怎么了脏嚷?”我有些...
    開封第一講書人閱讀 164,614評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長瞒御。 經(jīng)常有香客問我父叙,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,671評論 1 293
  • 正文 為了忘掉前任趾唱,我火速辦了婚禮涌乳,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘甜癞。我一直安慰自己夕晓,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,699評論 6 392
  • 文/花漫 我一把揭開白布带欢。 她就那樣靜靜地躺著运授,像睡著了一般。 火紅的嫁衣襯著肌膚如雪乔煞。 梳的紋絲不亂的頭發(fā)上吁朦,一...
    開封第一講書人閱讀 51,562評論 1 305
  • 那天,我揣著相機(jī)與錄音渡贾,去河邊找鬼逗宜。 笑死,一個胖子當(dāng)著我的面吹牛空骚,可吹牛的內(nèi)容都是我干的纺讲。 我是一名探鬼主播,決...
    沈念sama閱讀 40,309評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼囤屹,長吁一口氣:“原來是場噩夢啊……” “哼熬甚!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起肋坚,我...
    開封第一講書人閱讀 39,223評論 0 276
  • 序言:老撾萬榮一對情侶失蹤乡括,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后智厌,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體诲泌,經(jīng)...
    沈念sama閱讀 45,668評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,859評論 3 336
  • 正文 我和宋清朗相戀三年铣鹏,在試婚紗的時候發(fā)現(xiàn)自己被綠了敷扫。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,981評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡诚卸,死狀恐怖葵第,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情合溺,我是刑警寧澤羹幸,帶...
    沈念sama閱讀 35,705評論 5 347
  • 正文 年R本政府宣布,位于F島的核電站辫愉,受9級特大地震影響栅受,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,310評論 3 330
  • 文/蒙蒙 一屏镊、第九天 我趴在偏房一處隱蔽的房頂上張望依疼。 院中可真熱鬧,春花似錦而芥、人聲如沸律罢。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,904評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽误辑。三九已至,卻和暖如春歌逢,著一層夾襖步出監(jiān)牢的瞬間巾钉,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,023評論 1 270
  • 我被黑心中介騙來泰國打工秘案, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留砰苍,地道東北人。 一個月前我還...
    沈念sama閱讀 48,146評論 3 370
  • 正文 我出身青樓阱高,卻偏偏與公主長得像赚导,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子赤惊,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,933評論 2 355