【云原生】Kubernetes(k8s)Calico 客户端工具 calicoctl
文章目錄
- 一、概述
- 二、calicoctl 安裝
- 三、calicoctl 簡(jiǎn)單使用
- 1)認(rèn)證信息配置
- 2)查看 IP 資源池
- 3)配置 IP 池
- 4)IP 資源池示例演示
- 5)固定 IP 示例演示
- 6)網(wǎng)絡(luò)策略(NetworkPolicy)
- 四、Kube-ipam
- 1)安裝kube-ipam
- 2)子網(wǎng)和etcd配置
- 3)固定IP示例演示
一、概述
calicoctl 是 Calico 客戶端管理工具。 可以方便的管理 calico 網(wǎng)絡(luò),配置和安全策略,calicoctl 命令行提供了許多資源管理命令,允許您創(chuàng)建,修改,刪除和查看不同的 Calico 資源,網(wǎng)絡(luò)資源包含:node,bgpPeer,hostEndpoint,workloadEndpoint,ipPool,policy,profile等。
官方文檔:https://projectcalico.docs.tigera.io/reference/calicoctl/
關(guān)于Calico 可以參考我這篇文章:Kubernetes(k8s)CNI(Calico)網(wǎng)絡(luò)模型原理
二、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 簡(jiǎn)單使用
calicoctl通過讀寫calico的數(shù)據(jù)存儲(chǔ)系統(tǒng)(datastore)進(jìn)行查看或者其他各類管理操作,通常,它需要提供認(rèn)證信息經(jīng)由相應(yīng)的數(shù)據(jù)存儲(chǔ)完成認(rèn)證。在使用Kubernetes API數(shù)據(jù)存儲(chǔ)時(shí),需要使用類似kubectl的認(rèn)證信息完成認(rèn)證。它可以通過環(huán)境變量聲明的DATASTORE_TYPE和KUBECONFIG接入集群,例如以下命令格式運(yùn)行calicoctl:
1)認(rèn)證信息配置
export KUBECONFIG=/path/to/your/kubeconfig export DATASTORE_TYPE=kubernetes# 查看幫助 calicoctl --help # 查看calico節(jié)點(diǎn) calicoctl get nodes2)查看 IP 資源池
calicoctl get ipPools calicoctl get ipPool -o yaml3)配置 IP 池
IP 池 是 Calico 使用的 IP 地址范圍 工作負(fù)載終端節(jié)點(diǎn)。
定義兩個(gè)在此群集中使用的 IP 池。 您可以僅使用一個(gè) 池,但我們定義了兩個(gè),編排操作如下:
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執(zhí)行并查看
# 先查看IP資源池 calicoctl get ipPools# 創(chuàng)建兩個(gè)IP資源池 calicoctl create -f pool1.yaml calicoctl create -f pool2.yaml# 查看 calicoctl get ipPools
如果使用kubectl創(chuàng)建,就必須查詢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:# 【注意】不能使用單引號(hào)"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)網(wǎng)絡(luò)策略(NetworkPolicy)
網(wǎng)絡(luò)策略資源 (NetworkPolicy) 表示應(yīng)用的一組有序規(guī)則 到與 標(biāo)簽選擇器。NetworkPolicy 是命名空間資源。 NetworkPolicy 在特定命名空間中 僅適用于 工作負(fù)載終端節(jié)點(diǎn)資源 在該命名空間中。兩個(gè)資源位于同一命名空間中,如果 namespace 兩者上的值設(shè)置相同。 看 全局網(wǎng)絡(luò)策略資源 對(duì)于非命名空間網(wǎng)絡(luò)策略。
【示例】此示例策略允許來自 TCP 流量 frontend 端口 6379 的終結(jié)點(diǎn) database 端點(diǎn)。
# 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執(zhí)行
kubectl create ns production calicoctl create -f networkpolicy-test.yaml # 查看 calicoctl get networkPolicy --namespace=production -oyaml想了解更多網(wǎng)絡(luò)策略,可以查看官方文檔:https://projectcalico.docs.tigera.io/reference/resources/networkpolicy
四、Kube-ipam
Kube-ipam 基于etcd分布式存儲(chǔ)實(shí)現(xiàn)kubernetes動(dòng)態(tài)IP網(wǎng)絡(luò)分配管理,確保集群中IP地址的唯一性。Kube-ipam支持給kubernetes集群中的Pod固定IP地址,同時(shí)支持resolv.conf的DNS配置。這個(gè)需要基于網(wǎng)絡(luò)插件(例如:macvlan、ipvlan、kube-router、bridge、calico等),這里就使用calico網(wǎng)絡(luò)插件來實(shí)現(xiàn)。
一些場(chǎng)景往往對(duì)IP地址有依賴,需要使用固定IP地址的Pod,可以使用kube-ipam輕松解決這類問題。例如,mysql主從架構(gòu)的時(shí)候,主database與從database之間的同步;例如keepalived做集群HA的時(shí)候,兩個(gè)節(jié)點(diǎn)之間檢測(cè)通信等;例如某些安全防護(hù)設(shè)備,需要基于IP地址進(jìn)行網(wǎng)絡(luò)安全訪問策略限制的場(chǎng)景等。
GitHub地址:https://github.com/cloudnativer/kube-ipam
1)安裝kube-ipam
請(qǐng)確保你的kubelet正確的配置了network-plugin、cni-conf-dir 和 cni-bin-dir 參數(shù)。下面給出一個(gè)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)子網(wǎng)和etcd配置
你可以通過 subnet 參數(shù)設(shè)置IP子網(wǎng)信息,通過 gateway 設(shè)置網(wǎng)關(guān)信息。你可以通過 etcdConfig 配置etcd的證書和endpoint地址。編輯所有kubernetes node主機(jī)的 /etc/cni/net.d/1-kube-ipam.conf 文件。
# 類型 #"type": "calico", # 主網(wǎng)卡名稱 #"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 ---這里沒有真正的去驗(yàn)證,只是稍微說一下,還可以通過kube-ipam進(jìn)行固定IP配置,有興趣的小伙伴可以去試試;Calico 客戶端工具 calicoctl簡(jiǎn)單使用就先到這里了,有任何疑問歡迎給我留言,后續(xù)會(huì)持續(xù)更新【云原生+大數(shù)據(jù)】相關(guān)的文章~
總結(jié)
以上是生活随笔為你收集整理的【云原生】Kubernetes(k8s)Calico 客户端工具 calicoctl的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 道家王凤仪《五行语录》
- 下一篇: 前端理解base64