文章目录

  • 一、概述
  • 二、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_TYPEKUBECONFIG接入集群,例如以下命令格式运行calicoctl:

1)认证信息配置

export KUBECONFIG=/path/to/your/kubeconfig
export DATASTORE_TYPE=kubernetes# 查看帮助
calicoctl --help
# 查看calico节点
calicoctl get nodes

2)查看 IP 资源池

calicoctl get ipPools
calicoctl get ipPool -o yaml

3)配置 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

# 先删除上面新建的两个ip资源池
calicoctl delete -f pool1.yaml
calicoctl delete -f pool2.yaml
calicoctl get ipPools# 未修改前执行,发现是无法匹配对应的kind
kubectl create -f pool1.yaml# 查看apiVersion
kubectl api-versions|grep calico
# 查看kind
kubectl api-resources -o wide|grep calico|grep IPPool


修改

# 这里只需要把apiVersion换掉既可
cat > pool3.yaml <<EOF
apiVersion: crd.projectcalico.org/v1
kind: IPPool
metadata:name: pool3
spec:cidr: 10.245.3.0/24ipipMode: NevernatOutgoing: truedisabled: falsenodeSelector: all()
EOFcat > pool4.yaml <<EOF
apiVersion: crd.projectcalico.org/v1
kind: IPPool
metadata:name: pool4
spec:cidr: 10.245.4.0/24ipipMode: NevernatOutgoing: truedisabled: truenodeSelector: all()
EOF# 先查看ip资源池
calicoctl get ipPools# 执行
kubectl create -f pool3.yaml
kubectl create -f pool4.yaml

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
EOF

5)固定 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: 80

6)网络策略(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配置。这个需要基于网络插件(例如:macvlanipvlankube-routerbridgecalico等),这里就使用calico网络插件来实现。

一些场景往往对IP地址有依赖,需要使用固定IP地址的Pod,可以使用kube-ipam轻松解决这类问题。例如,mysql主从架构的时候,主database与从database之间的同步;例如keepalived做集群HA的时候,两个节点之间检测通信等;例如某些安全防护设备,需要基于IP地址进行网络安全访问策略限制的场景等。

GitHub地址:https://github.com/cloudnativer/kube-ipam

1)安装kube-ipam

请确保你的kubelet正确的配置了network-plugincni-conf-dircni-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-ipam

2)子网和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相关推荐

  1. 云原生 | Kubernetes - k8s集群搭建(kubeadm)(持续收录报错中)

    目录 前置 1.实现效果 2.环境准备 3.系统初始化 关闭防火墙 关闭 selinux 关闭 swap 主机名 配置hosts 将桥接的 IPv4 流量传递到 iptables 的链 时间同步 部署 ...

  2. 【云原生 • Kubernetes】命令行工具 kubectl 介绍及命令汇总

    本文导读 1. kubectl 概述 2. kubectl 命令语法 3. kubectl help 获取更多信息 4. kubectl 命令大全 • 基础命令 • 部署命令 • 集群管理命令 • 故 ...

  3. 【云原生 | Kubernetes 实战】01、K8s-v1.25集群搭建和部署基于网页的 K8s 用户界面 Dashboard

    目录 一.K8s 概述 可以查看官方文档:概述 | Kubernetes 组件交互逻辑: 二.kubeadm 安装 K8s-v1.25高可用集群 k8s 环境规划: 1.初始化环境 2.安装 Dock ...

  4. 云原生|kubernetes|网络插件flannel二进制部署和calico的yaml清单部署总结版

    前言: 前面写了一些关于calico的文章,但感觉好像是浅尝辄止,分散在了几篇文章内,并且很多地方还是没有说的太清楚云原生|kubernetes|kubernetes的网络插件calico和flann ...

  5. 【云原生之k8s】k8s管理工具kubectl详解

    [云原生之k8s]k8s管理工具kubectl详解 前言 一.陈述式管理 (1)陈述式资源管理方法 (2)k8s相关信息查看 ①查看版本信息 ②查看节点信息 ③查看资源对象简写 ④查看集群信息 ⑤配置 ...

  6. 【云原生 | Kubernetes 实战】18、K8s 安全实战篇之 RBAC 认证授权(上)

    目录 一.k8s 安全管理:认证.授权.准入控制概述 1.1 认证 认证基本介绍 授权基本介绍 准入控制基本介绍 为什么需要准入控制器呢? k8s 客户端访问 apiserver 的几种认证方式 ku ...

  7. 【云原生 | Kubernetes 实战】18、K8s 安全实战篇之 RBAC 认证授权(下)

    目录 一.常见角色(role)授权的案例 1.1 允许读取核心 API 组的 Pod 资源 1.2 允许读写 apps API 组中的 deployment 资源 1.3 允许读取 Pod 以及读写 ...

  8. 【云原生Kubernetes系列第五篇】kubeadm v1.20 部署K8S 集群架构(人生这道选择题,总会有遗憾)

    系列文章目录 ??即日起,更新云原生相关知识,喜欢的小伙伴可以给我点个三连喔 ??收录至专栏 云原生 ??[云原生Docker系列第一篇]Docker镜像管理 ??[云原生Docker系列第二篇]Do ...

  9. 【云原生 | Kubernetes 系列】---Skywalking部署和监控

    [云原生 | Kubernetes 系列]-Skywalking部署和监控 1. 分布式链路追踪概念 在较大的web集群和微服务环境中,客户端的一次请求可能需要经过多个不同的模块,多个不同中间件,多个 ...

最新文章

  1. Html转义字符列表
  2. 【No.9 内存泄漏了么】
  3. (转)Python 用hashlib求中文字符串的MD5值
  4. Leetcode: Valid Parentheses
  5. C和C++之用extern “C“实现它们之间的互调
  6. C++如何使用MySQL数据库
  7. LeetCode(783)——二叉搜索树结点最小距离(JavaScript)
  8. 前大厂员工谈中美企业区别,中企不用单元测试,仅靠QA检查代码?
  9. VScode Settings Sync同步功能设置
  10. 二十三种设计模式[4] - 原型模式(Prototype Pattern)
  11. C语言来实现链表创建
  12. vb3计算机,2014年计算机二级考试VB试题 3
  13. mvn命令启动Spring boot项目
  14. 电脑基础知识入门:键盘上的英文,意思和功能汇总!
  15. php+ul+前缀点怎么加,子网前缀长度怎么填
  16. 权限和归属关系解析与新手小白操作教程
  17. 查询当前数据库名、用户名、数据库服务器IP、端口、数据库版本信息。
  18. trove mitaka集成
  19. 【Python】时间序列数据分析与预测之Python工具汇总
  20. 汇编语言-int指令

热门文章

  1. Tensorflow读取图片并转换成张量
  2. 开源的高性能Java集合:GNU Trove介绍
  3. list里每个元素字符串转为int;‘list‘ object is not callable;list中字符串改为int;字符串转为list;list每个int转为str;list转为字符串;
  4. 国际化进程加速,上海树图区块链研究院联合创始人伍鸣博士受邀访问香港科技园...
  5. 如何安装最新igraph 现在已经无坑了
  6. AI 医学影像公司及其产品(更新中)
  7. sdnu 1031 字母排序(拓扑排序的利用)
  8. Web前端低代码介绍的ppt大纲
  9. 算法很没:快速渡河问题
  10. vertica MySQL_MySQL数据库之Vertica数据库的用法