【云原生】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 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配置。这个需要基于网络插件(例如: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-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相关推荐
- 云原生 | Kubernetes - k8s集群搭建(kubeadm)(持续收录报错中)
目录 前置 1.实现效果 2.环境准备 3.系统初始化 关闭防火墙 关闭 selinux 关闭 swap 主机名 配置hosts 将桥接的 IPv4 流量传递到 iptables 的链 时间同步 部署 ...
- 【云原生 • Kubernetes】命令行工具 kubectl 介绍及命令汇总
本文导读 1. kubectl 概述 2. kubectl 命令语法 3. kubectl help 获取更多信息 4. kubectl 命令大全 • 基础命令 • 部署命令 • 集群管理命令 • 故 ...
- 【云原生 | Kubernetes 实战】01、K8s-v1.25集群搭建和部署基于网页的 K8s 用户界面 Dashboard
目录 一.K8s 概述 可以查看官方文档:概述 | Kubernetes 组件交互逻辑: 二.kubeadm 安装 K8s-v1.25高可用集群 k8s 环境规划: 1.初始化环境 2.安装 Dock ...
- 云原生|kubernetes|网络插件flannel二进制部署和calico的yaml清单部署总结版
前言: 前面写了一些关于calico的文章,但感觉好像是浅尝辄止,分散在了几篇文章内,并且很多地方还是没有说的太清楚云原生|kubernetes|kubernetes的网络插件calico和flann ...
- 【云原生之k8s】k8s管理工具kubectl详解
[云原生之k8s]k8s管理工具kubectl详解 前言 一.陈述式管理 (1)陈述式资源管理方法 (2)k8s相关信息查看 ①查看版本信息 ②查看节点信息 ③查看资源对象简写 ④查看集群信息 ⑤配置 ...
- 【云原生 | Kubernetes 实战】18、K8s 安全实战篇之 RBAC 认证授权(上)
目录 一.k8s 安全管理:认证.授权.准入控制概述 1.1 认证 认证基本介绍 授权基本介绍 准入控制基本介绍 为什么需要准入控制器呢? k8s 客户端访问 apiserver 的几种认证方式 ku ...
- 【云原生 | Kubernetes 实战】18、K8s 安全实战篇之 RBAC 认证授权(下)
目录 一.常见角色(role)授权的案例 1.1 允许读取核心 API 组的 Pod 资源 1.2 允许读写 apps API 组中的 deployment 资源 1.3 允许读取 Pod 以及读写 ...
- 【云原生Kubernetes系列第五篇】kubeadm v1.20 部署K8S 集群架构(人生这道选择题,总会有遗憾)
系列文章目录 ??即日起,更新云原生相关知识,喜欢的小伙伴可以给我点个三连喔 ??收录至专栏 云原生 ??[云原生Docker系列第一篇]Docker镜像管理 ??[云原生Docker系列第二篇]Do ...
- 【云原生 | Kubernetes 系列】---Skywalking部署和监控
[云原生 | Kubernetes 系列]-Skywalking部署和监控 1. 分布式链路追踪概念 在较大的web集群和微服务环境中,客户端的一次请求可能需要经过多个不同的模块,多个不同中间件,多个 ...
最新文章
- CKEditor的安装与基本使用
- 【今日互联网大事儿】小米净化器出来了呢
- 超越 MobileNet,谷歌提出 MobileDets:移动端目标检测新标杆
- P1912-[NOI2009]诗人小G【四边形不等式,单调队列】
- c语言如何实现不定参数,C语言中不定参数的实现
- oracle rac war配置,Oracle RAC安装配置流程
- Hadoop1.x中HDFS工作原理
- 免费学python的网课-学习python的时候观看网课学习还是买书学习效率高?
- Unity3D切换场景之后光源失效(物体变暗)问题
- 夜间模式(模仿喜马拉雅FM)
- chrome历史版本及重大变化(维基百科)
- python爬虫脚本 初级入门爬虫英雄联盟所有皮肤_Python爬虫实战,60行代码爬取英雄联盟全英雄全皮肤,找寻曾今那些被删除的绝版皮肤...
- 跨平台移动开发平台Flutter环境搭建
- spark原理及其优化
- ROS学习总结一:talker and listener
- 身份验证绕过漏洞分析
- Office365 Word 打开某个文件就自动卡死关闭
- 中学计算机课程课时,高中信息技术教案word操作(共5份8课时
- SID # 和NID #(系统识别码和网络识别码)
- 炉石传说服务器维护有补偿吗,炉石传说维护补偿是什么?炉石维护补偿公布!...
热门文章
- 采用FPGA开发高清相机sensorISP芯片要点分析
- MATLAB升级失败导致无法使用simulink
- iOS攻城狮修炼之路
- 三星i865刷android,三星亮剑,120Hz+1.08亿+高通骁龙865,这才是安卓机皇
- RSS订阅微信公众号初探-feed43
- UIPATH 结合 Python 识别 PDF 中的表格
- python获取word页数_使用Python的word文档的页数(Number of pages of a word document with Python)...
- C++ endl 的本质是什么
- 深入探究宽字节注入漏洞与修补原理
- 好佳居窗帘十大品牌-窗帘这样搭才好看