日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

K8S Calico

發布時間:2023/11/29 编程问答 46 豆豆
生活随笔 收集整理的這篇文章主要介紹了 K8S Calico 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

NetworkPolicy是kubernetes對pod的隔離手段,是宿主機上的一系列iptables規則。

Egress 表示出站流量,就是pod作為客戶端訪問外部服務,pod地址作為源地址。策略可以定義目標地址或者目的端口
Ingress 表示入站流量,pod地址和服務作為服務端,提供外部訪問。pod地址作為目標地址。策略可以定義源地址和自己端口

官網
https://docs.projectcalico.org/v3.1/getting-started/kubernetes/

我們這里使用的是 flannel 構建 K8S 網絡,使用 Calico 構建網絡規則

mkdir ~/networkpolicy ; cd ~/networkpolicykubectl apply -f https://docs.projectcalico.org/v3.1/getting-started/kubernetes/installation/hosted/canal/rbac.yaml kubectl apply -f https://docs.projectcalico.org/v3.1/getting-started/kubernetes/installation/hosted/canal/canal.yaml kubectl get pods -n kube-system# 創建兩個命名空間 dev 和 prod 進行測試 kubectl create namespace dev kubectl create namespace prodvi pod-a.yaml # 內容如下 apiVersion: v1 kind: Pod metadata:name: pod1 spec:containers:- name: myappimage: ikubernetes/myapp:v1# 在命名空間 dev 創建 pod1 kubectl apply -f pod-a.yaml -n dev kubectl get pods -n dev -o wide # 運行結果: NAME READY STATUS RESTARTS AGE IP NODE pod1 1/1 Running 0 14m 10.244.2.2 node2# 在命名空間 prod 創建 pod1 kubectl apply -f pod-a.yaml -n prod kubectl get pods -n prod -o wide # 運行結果: NAME READY STATUS RESTARTS AGE IP NODE pod1 1/1 Running 0 14m 10.244.1.2 node1# 測試網絡 curl 10.244.1.2 # 正常訪問 curl 10.244.2.2 # 正常訪問kubectl exec pod1 -it -n prod -- /bin/sh ping 10.244.2.2 # 鏈路正常

Ingress

# Ingress 默認禁止所有的入站流量 vi ngress-def.yaml apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata:name: deny-all-ingress spec:podSelector: {}policyTypes:- Ingresskubectl apply -f ingress-def.yaml -n dev# 查看 networkpolicy 規則 kubectl get netpol -n devcurl 10.244.2.2 # 命名空間 dev pod1 無法訪問curl 10.244.1.2 # 命名空間 prod pod1 正常訪問# 開放所有的入站流量 vi ingress-def.yaml apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata:name: deny-all-ingress spec:podSelector: {}ingress:- {}policyTypes:- Ingresskubectl apply -f ingress-def.yaml -n devcurl 10.244.1.2 # 命名空間 prod pod1 正常訪問curl 10.244.2.2 # 命名空間 dev pod1 正常訪問

通過規則限制入站流量

kubectl delete netpol deny-all-ingress -n devkubectl label pods pod1 app=myapp -n dev# 添加網絡規則 vi allow-netpol-demo.yaml apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata:name: allow-myapp-ingress spec:podSelector:matchLabels:app: myapp # 選擇app=myapp 的標簽放行ingress:- from:- ipBlock: # 地址段cidr: 10.244.0.0/16 # 允許這個地址段訪問except: # 排除一下地址不可以訪問- 10.244.1.2/32ports:- protocol: TCPport: 80 # 允許訪問80端口- protocol: TCPport: 443kubectl apply -f allow-netpol-demo.yaml -n devkubectl get netpol -n devcurl 10.244.2.2:80 # 命名空間 dev pod1 正常訪問curl 10.244.2.2:443 # NetworkPolicy 放行,沒有開放 443 端口,服務器拒絕 curl: (7) Failed connect to 10.244.2.2:443; Connection refusedcurl 10.244.2.2:6443 # 卡住,被 NetworkPolicy 拒絕

Egress

# 默認限制所有的出站流量 vi egrees-def.yaml apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata:name: deny-all-egress spec:podSelector: {}policyTypes:- Egresskubectl apply -f egrees-def.yaml -n prodkubectl get pods -n kube-system -o wide # 選取一個 coredns 的 pod ipkubectl exec pod1 -it -n prod -- /bin/sh ping 10.244.0.4 # 無法正常 ping 通# 放行所有的出站流量 vi egrees-def.yaml apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata:name: deny-all-egress spec:podSelector: {}egress:- {}policyTypes:- Egresskubectl apply -f egrees-def.yaml -n prodkubectl exec pod1 -it -n prod -- /bin/sh ping 10.244.0.4 # 正常 ping 通

轉載于:https://www.cnblogs.com/klvchen/p/10000687.html

總結

以上是生活随笔為你收集整理的K8S Calico的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。