【云原生】Kubernetes(k8s)Calico 客户端工具 calicoctl
文章目錄
- 一、概述
- 二、calicoctl 安裝
- 三、calicoctl 簡單使用
- 1)認證信息配置
- 2)查看 IP 資源池
- 3)配置 IP 池
- 4)IP 資源池示例演示
- 5)固定 IP 示例演示
- 6)網絡策略(NetworkPolicy)
- 四、Kube-ipam
- 1)安裝kube-ipam
- 2)子網和etcd配置
- 3)固定IP示例演示
一、概述
calicoctl 是 Calico 客戶端管理工具。 可以方便的管理 calico 網絡,配置和安全策略,calicoctl 命令行提供了許多資源管理命令,允許您創建,修改,刪除和查看不同的 Calico 資源,網絡資源包含:node,bgpPeer,hostEndpoint,workloadEndpoint,ipPool,policy,profile等。
官方文檔:https://projectcalico.docs.tigera.io/reference/calicoctl/
關于Calico 可以參考我這篇文章:Kubernetes(k8s)CNI(Calico)網絡模型原理
二、calicoctl 安裝
wget https://github.com/projectcalico/calico/releases/download/v3.24.5/calicoctl-linux-amd64 mv calicoctl-linux-amd64 /usr/local/bin/calicoctl chmod +x /usr/local/bin/calicoctl# 查看 calicoctl version三、calicoctl 簡單使用
calicoctl通過讀寫calico的數據存儲系統(datastore)進行查看或者其他各類管理操作,通常,它需要提供認證信息經由相應的數據存儲完成認證。在使用Kubernetes API數據存儲時,需要使用類似kubectl的認證信息完成認證。它可以通過環境變量聲明的DATASTORE_TYPE和KUBECONFIG接入集群,例如以下命令格式運行calicoctl:
1)認證信息配置
export KUBECONFIG=/path/to/your/kubeconfig export DATASTORE_TYPE=kubernetes# 查看幫助 calicoctl --help # 查看calico節點 calicoctl get nodes2)查看 IP 資源池
calicoctl get ipPools calicoctl get ipPool -o yaml3)配置 IP 池
IP 池 是 Calico 使用的 IP 地址范圍 工作負載終端節點。
定義兩個在此群集中使用的 IP 池。 您可以僅使用一個 池,但我們定義了兩個,編排操作如下:
cat > pool1.yaml <<EOF apiVersion: projectcalico.org/v3 kind: IPPool metadata:name: pool1 spec:cidr: 10.245.1.0/24ipipMode: NevernatOutgoing: truedisabled: falsenodeSelector: all() EOFcat > pool2.yaml <<EOF apiVersion: projectcalico.org/v3 kind: IPPool metadata:name: pool2 spec:cidr: 10.245.2.0/24ipipMode: NevernatOutgoing: truedisabled: truenodeSelector: all() EOF執行并查看
# 先查看IP資源池 calicoctl get ipPools# 創建兩個IP資源池 calicoctl create -f pool1.yaml calicoctl create -f pool2.yaml# 查看 calicoctl get ipPools
如果使用kubectl創建,就必須查詢apiVersion和kind
修改
4)IP 資源池示例演示
利用注解cni.projectcalico.org/ipv4pools。
cat > ipv4pools-deployment-test.yaml <<EOF # apiVersion: projectcalico.org/v3 apiVersion: crd.projectcalico.org/v1 kind: IPPool metadata:name: new-pool1 spec:blockSize: 31cidr: 10.244.3.220/24ipipMode: NevernatOutgoing: true --- # apiVersion: projectcalico.org/v3 apiVersion: crd.projectcalico.org/v1 kind: IPPool metadata:name: new-pool2 spec:blockSize: 31cidr: 10.244.4.221/24ipipMode: NevernatOutgoing: true --- apiVersion: apps/v1 kind: Deployment metadata:name: fixed-ip-test2namespace: defaultlabels:k8s-app: cloudnativer-test spec:replicas: 3strategy:type: RollingUpdaterollingUpdate:maxUnavailable: 1selector:matchLabels:k8s-app: cloudnativer-testtemplate:metadata:labels:k8s-app: cloudnativer-testannotations:# 【注意】不能使用單引號"cni.projectcalico.org/ipv4pools": "[\"new-pool1\",\"new-pool2\"]"spec:containers:- name: fixed-ip-testimage: nginx:1.7.9imagePullPolicy: IfNotPresentports:- name: httpcontainerPort: 80 EOF5)固定 IP 示例演示
利用注解 cni.projectcalico.org/ipAddrs
# vi fixed-ip-test-deployment.yaml --- apiVersion: apps/v1 kind: Deployment metadata:name: fixed-ip-testnamespace: defaultlabels:k8s-app: cloudnativer-test spec:replicas: 1strategy:type: RollingUpdaterollingUpdate:maxUnavailable: 1selector:matchLabels:k8s-app: cloudnativer-testtemplate:metadata:labels:k8s-app: cloudnativer-testannotations:cni.projectcalico.org/ipAddrs: "[\"10.244.1.220\"]"spec:containers:- name: fixed-ip-testimage: nginx:1.7.9imagePullPolicy: IfNotPresentports:- name: httpcontainerPort: 806)網絡策略(NetworkPolicy)
網絡策略資源 (NetworkPolicy) 表示應用的一組有序規則 到與 標簽選擇器。NetworkPolicy 是命名空間資源。 NetworkPolicy 在特定命名空間中 僅適用于 工作負載終端節點資源 在該命名空間中。兩個資源位于同一命名空間中,如果 namespace 兩者上的值設置相同。 看 全局網絡策略資源 對于非命名空間網絡策略。
【示例】此示例策略允許來自 TCP 流量 frontend 端口 6379 的終結點 database 端點。
# vim networkpolicy-test.yaml apiVersion: projectcalico.org/v3 kind: NetworkPolicy metadata:name: allow-tcp-6379namespace: production spec:selector: role == 'database'types:- Ingress- Egressingress:- action: Allowmetadata:annotations:from: frontendto: databaseprotocol: TCPsource:selector: role == 'frontend'destination:ports:- 6379egress:- action: Allow執行
kubectl create ns production calicoctl create -f networkpolicy-test.yaml # 查看 calicoctl get networkPolicy --namespace=production -oyaml想了解更多網絡策略,可以查看官方文檔:https://projectcalico.docs.tigera.io/reference/resources/networkpolicy
四、Kube-ipam
Kube-ipam 基于etcd分布式存儲實現kubernetes動態IP網絡分配管理,確保集群中IP地址的唯一性。Kube-ipam支持給kubernetes集群中的Pod固定IP地址,同時支持resolv.conf的DNS配置。這個需要基于網絡插件(例如:macvlan、ipvlan、kube-router、bridge、calico等),這里就使用calico網絡插件來實現。
一些場景往往對IP地址有依賴,需要使用固定IP地址的Pod,可以使用kube-ipam輕松解決這類問題。例如,mysql主從架構的時候,主database與從database之間的同步;例如keepalived做集群HA的時候,兩個節點之間檢測通信等;例如某些安全防護設備,需要基于IP地址進行網絡安全訪問策略限制的場景等。
GitHub地址:https://github.com/cloudnativer/kube-ipam
1)安裝kube-ipam
請確保你的kubelet正確的配置了network-plugin、cni-conf-dir 和 cni-bin-dir 參數。下面給出一個kubelet的配置示例供你參考:
# vi /usr/lib/systemd/system/kubelet.service # ... ExecStart=/usr/local/bin/kubelet \ --network-plugin=cni \ --cni-conf-dir=/etc/cni/net.d \ --cni-bin-dir=/opt/cni/bin/ \# 重啟kubelet systemctl daemon-reload systemctl restart kubelet下載安裝 kube-ipam
wget https://github.com/cloudnativer/kube-ipam/releases/download/v0.2.0/kube-ipam-v0.2.0-x86.tgz tar -zxvf kube-ipam-v0.2.0-x86.tgz mv kube-ipam/kube-ipam /opt/cni/bin/kube-ipam2)子網和etcd配置
你可以通過 subnet 參數設置IP子網信息,通過 gateway 設置網關信息。你可以通過 etcdConfig 配置etcd的證書和endpoint地址。編輯所有kubernetes node主機的 /etc/cni/net.d/1-kube-ipam.conf 文件。
# 類型 #"type": "calico", # 主網卡名稱 #"master": "ens33", # cat /etc/cni/net.d/1-kube-ipam.conf {"cniVersion":"0.3.1","name": "k8snetwork","type": "calico","master": "ens33","ipam": {"name": "kube-subnet","type": "kube-ipam","kubeConfig": "/etc/kubernetes/pki/kubectl.kubeconfig""etcdConfig": {"etcdURL": "https://192.168.1.50:2379,https://192.168.1.58:2379,https://192.168.1.63:2379","etcdCertFile": "/etc/kubernetes/pki/etcd.pem","etcdKeyFile": "/etc/kubernetes/pki/etcd-key.pem","etcdTrustedCAFileFile": "/etc/kubernetes/pki/ca.pem"},"subnet": "10.188.0.0/16","fixedStart": "10.188.0.10","fixedEnd": "10.188.0.255","rangeStart": "10.188.1.0","rangeEnd": "10.188.255.254","gateway": "10.188.0.1","routes": [{"dst": "0.0.0.0/0"}],"resolvConf": "/etc/resolv.conf"} }3)固定IP示例演示
# cat fixed-ip-test-Deployment.yaml --- apiVersion: apps/v1 kind: Deployment metadata:name: fixed-ip-testnamespace: defaultlabels:k8s-app: cloudnativer-test spec:replicas: 1strategy:type: RollingUpdaterollingUpdate:maxUnavailable: 1selector:matchLabels:k8s-app: cloudnativer-testtemplate:metadata:labels:k8s-app: cloudnativer-testannotations:kube-ipam.ip: "10.188.0.216"kube-ipam.netmask: "255.255.0.0"kube-ipam.gateway: "10.188.0.1"spec:containers:- name: fixed-ip-testimage: nginx:1.7.9imagePullPolicy: IfNotPresentports:- name: httpcontainerPort: 80 ---這里沒有真正的去驗證,只是稍微說一下,還可以通過kube-ipam進行固定IP配置,有興趣的小伙伴可以去試試;Calico 客戶端工具 calicoctl簡單使用就先到這里了,有任何疑問歡迎給我留言,后續會持續更新【云原生+大數據】相關的文章~
總結
以上是生活随笔為你收集整理的【云原生】Kubernetes(k8s)Calico 客户端工具 calicoctl的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 道家王凤仪《五行语录》
- 下一篇: 简单xss接收cookie平台的搭建以及