【云原生】Kubernetes(k8s)Calico 客户端工具 calicoctl

news2024/9/20 1:12:00

文章目录

    • 一、概述
    • 二、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/24
  ipipMode: Never
  natOutgoing: true
  disabled: false
  nodeSelector: all()
EOF

cat > pool2.yaml <<EOF
apiVersion: projectcalico.org/v3
kind: IPPool
metadata:
  name: pool2
spec:
  cidr: 10.245.2.0/24
  ipipMode: Never
  natOutgoing: true
  disabled: true
  nodeSelector: 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/24
  ipipMode: Never
  natOutgoing: true
  disabled: false
  nodeSelector: all()
EOF

cat > pool4.yaml <<EOF
apiVersion: crd.projectcalico.org/v1
kind: IPPool
metadata:
  name: pool4
spec:
  cidr: 10.245.4.0/24
  ipipMode: Never
  natOutgoing: true
  disabled: true
  nodeSelector: 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: 31
  cidr: 10.244.3.220/24
  ipipMode: Never
  natOutgoing: true
---
# apiVersion: projectcalico.org/v3
apiVersion: crd.projectcalico.org/v1
kind: IPPool
metadata:
  name: new-pool2
spec:
  blockSize: 31
  cidr: 10.244.4.221/24
  ipipMode: Never
  natOutgoing: true
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: fixed-ip-test2
  namespace: default
  labels:
    k8s-app: cloudnativer-test
spec:
  replicas: 3
  strategy:
    type: RollingUpdate
    rollingUpdate:
      maxUnavailable: 1
  selector:
    matchLabels:
      k8s-app: cloudnativer-test
  template:
    metadata:
      labels:
        k8s-app: cloudnativer-test
      annotations:
        # 【注意】不能使用单引号
        "cni.projectcalico.org/ipv4pools": "[\"new-pool1\",\"new-pool2\"]"
    spec:
      containers:
      - name: fixed-ip-test
        image: nginx:1.7.9
        imagePullPolicy: IfNotPresent
        ports:
        - name: http
          containerPort: 80
EOF

在这里插入图片描述

5)固定 IP 示例演示

利用注解 cni.projectcalico.org/ipAddrs

# vi fixed-ip-test-deployment.yaml
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: fixed-ip-test
  namespace: default
  labels:
    k8s-app: cloudnativer-test
spec:
  replicas: 1
  strategy:
    type: RollingUpdate
    rollingUpdate:
      maxUnavailable: 1
  selector:
    matchLabels:
      k8s-app: cloudnativer-test
  template:
    metadata:
      labels:
        k8s-app: cloudnativer-test
      annotations:
        cni.projectcalico.org/ipAddrs: "[\"10.244.1.220\"]"
    spec:
      containers:
      - name: fixed-ip-test
        image: nginx:1.7.9
        imagePullPolicy: IfNotPresent
        ports:
        - name: http
          containerPort: 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-6379
  namespace: production
spec:
  selector: role == 'database'
  types:
  - Ingress
  - Egress
  ingress:
  - action: Allow
    metadata:
      annotations:
        from: frontend
        to: database
    protocol: TCP
    source:
      selector: role == 'frontend'
    destination:
      ports:
      - 6379
  egress:
  - 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-test
  namespace: default
  labels:
    k8s-app: cloudnativer-test
spec:
  replicas: 1
  strategy:
    type: RollingUpdate
    rollingUpdate:
      maxUnavailable: 1
  selector:
    matchLabels:
      k8s-app: cloudnativer-test
  template:
    metadata:
      labels:
        k8s-app: cloudnativer-test
      annotations:
        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-test
        image: nginx:1.7.9
        imagePullPolicy: IfNotPresent
        ports:
        - name: http
          containerPort: 80  
---

这里没有真正的去验证,只是稍微说一下,还可以通过kube-ipam进行固定IP配置,有兴趣的小伙伴可以去试试;Calico 客户端工具 calicoctl简单使用就先到这里了,有任何疑问欢迎给我留言,后续会持续更新【云原生+大数据】相关的文章~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/22276.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

盘点MySQL的八大日志,你知道哪些?

前言 日志对于任何系统应用来说都承载着至关重要的作用&#xff0c;借助日志&#xff0c;我们可以发现系统运行错误的原因&#xff0c;从而解决问题。MySQL也不例外&#xff0c;也会记录各种各样的日志信息。那么你知道MySQL都有哪些日志吗&#xff1f;每种日志的作用是干吗吗…

【Ajax】全面详细了解git的基础操作【万字教学+面试常客】

✍️ 作者简介: 前端新手学习中。 &#x1f482; 作者主页: 作者主页查看更多前端教学 &#x1f393; 专栏分享&#xff1a;css重难点教学 Node.js教学 从头开始学习 ajax学习 文章目录学习目标起步——关于版本的控制  文件的版本  版本控制软件  使用版本控制软件的好…

UDP和TCP两大协议的区别,让你快速高效掌握

UDP和TCP两大协议的区别 谈起UDP与TCP两大协议的异同&#xff0c;有人说我喜欢用TCP不喜欢用UDP&#xff0c;也有人说我喜欢用UDP而不喜欢用TCP&#xff0c;使用TCP的人说&#xff0c;我使用使用的协议比较可靠、不容易粘包、不容易丢包;使用UDP的人说&#xff0c;我使用的协议…

电脑没有声音了怎么恢复?恢复声音的6个方法【图解】

如今&#xff0c;很多电脑用户都会购买上各种不同品牌的音效产品&#xff0c;以便在必要时可以用来作为背景音乐。但在使用电脑过程中&#xff0c;总会遇到一些声音问题。有些朋友可能会因为声音问题而导致电脑无法正常使用。那么&#xff0c;电脑没有声音了怎么恢复&#xff1…

SpringSecurity框架【详细教学】

SpringSecurity 文章目录 文章目录SpringSecurity文章目录1、概述2、Spring Security、[Apache](https://so.csdn.net/so/search?qApache&spm1001.2101.3001.7020) Shiro 选择问题2.1、Shiro2.1.1、shiro的优点2.1.2、shiro的缺点2.2、Spring Security2.2.1、spring-secu…

计控实验(一)—— 数字滤波实验

太原理工大学计算机控制技术实验之数字滤波实验 数字滤波实验实验原理实验内容实验线路图设计参考流程图实验步骤及结果采样周期设计运行结果思考题实验原理 一般现场环境比较恶劣&#xff0c;干扰源比较多&#xff0c;消除和抑制干扰的方法主要有模拟滤波和数字滤波两种。由于…

Mybatis—解析SQL配置

Mybatis源代码中SqlSource描述XML文件或者Java注解配置的SQL信息&#xff0c;SqlNode描述动态SQL配置中的<if>和<where>等标签&#xff0c;LanguageDriver的职责就是负责将Mapper SQL配置进行解析&#xff0c;然后将SQL配置信息转换为SqlSource对象。从而可见Langu…

Nginx补充部分--IO模型

IO模型 服务端IO流程 磁盘I/O 磁盘I/O是进程向内核发起系统调用&#xff0c;请求磁盘上的某个资源比如是html 文件或者图片&#xff0c;然后内核通过相应的驱动程序将目标文件加载到内核的内存空间&#xff0c;加载完成之后把数据从内核内存再复制给进程内存&#xff0c;如果…

postgres-operator 原理解析- 章节 II 减少failover次数

本文讨论一波&#xff0c;kubernetes集群部署的高可用postgresql集群在滚动更新场景下&#xff0c;如何实现减少failover次数&#xff1f; 这个原理我觉得适用于任何主从架构的中间件&#xff0c;是一个通用的设计技巧。 那就是&#xff1a; 在进行滚动升级过程中&#xff0c…

谁在领跑纯电动L2

电动化智能化&#xff0c;正在产生协同效应。 根据高工智能汽车研究院最新监测数据显示&#xff0c;2022年1-10月&#xff0c;中国市场&#xff08;不含进出口&#xff09;乘用车前装标配搭载L2级辅助驾驶交付上险受到整体车市影响&#xff0c;同比下滑12.67%。不过&#xff0c…

关闭jupyter notebook报错

关闭jupyter notebook报错:python.exe-应用程序错误_秋叶原の黑猫的博客-CSDN博客 关闭jupyter notebook报错:python.exe-应用程序错误 此前在使用jupyter notebook的时候&#xff0c;没有出现问题&#xff0c;后面某次在使用之后&#xff0c;直接关闭终端之后&#xff0c;出现…

kotlin coroutine源码解析之Dispatchers协程调度器

目录Dispatchers协程调度器Dispatchers.DefaultDispatchers.IODispatchers.MainDispatchers.Unconfined协程调度器的实现CoroutineScheduler总结Dispatchers协程调度器 CoroutineDispatcher&#xff0c;具有用于调度任务的底层执行器。ExecutorCoroutineDispatcher的实例应由调…

计算机系统基础实验——数据的机器级表示(条件表达式 x?y:z)

题目描述&#xff1a; /* *conditional- 条件表达式 x?y:z *例子&#xff1a;conditional (2,4,5)4, *合法运算符号&#xff1a;&#xff01;~&^|<<>> */ int conditional (int x,int y, int z) { /**************/ return/******/; }首先来看什么是三目运算&…

Kubernetes云原生实战02 磁盘分区挂载实战

大家好&#xff0c;我是飘渺。 今天咱们继续更新Kubernetes云原生实战系列&#xff0c;如何基于上篇文章中提到的部署架构进行磁盘分区、格式化、挂载目录。 看到这里估计很多人要直接就关掉了&#xff1a;磁盘分区格式化不是运维的事吗&#xff0c;跟我开发有什么关系&#x…

图书管理系统(Java实现)[附完整代码]

作者&#xff1a;爱塔居的博客_CSDN博客-JavaSE领域博主 专栏&#xff1a;JavaSE 作者专栏&#xff1a;大三学生&#xff0c;希望跟大家一起进步&#xff01; 文章目录 目录 文章目录 一、图书管理系统菜单 二、实现基本框架 三、实现业务 3.1 打印所有图书 3.2 退出系统 3.3 查…

化合物纯度、溶剂溶解度检测

产品检测方法一般有核磁共振氢谱 (HNMR)&#xff0c;液质联用 (LCMS)&#xff0c;高效液相色谱 (HPLC)。我们一般通过核磁共振确定结构式 (产品是否正确) 和大概纯度 (是否含杂质及杂质大概比例)&#xff0c;通过 LCMS 或 HPLC 测定确定产品具体纯度 (产品需要有紫外吸收)。■ …

连锁超市如何部署远程监控系统

大型超市又称综合超市&#xff0c;一般是采取自选销售方式&#xff0c;以销售大众化实用品为主&#xff0c;并将超市和折扣店的经营优势结合为一体的&#xff0c;品种齐全&#xff0c;满足顾客一次性购齐的零售业态。根据商品结构&#xff0c;可以分为以经营食品为主的大型超市…

神了,用 Python 预测世界杯决赛,发现准确率还挺高

那么四年一度的世界杯即将要在卡塔尔开幕了&#xff0c;对于不少热爱足球运动的球迷来说&#xff0c;这可是十分难得的盛宴&#xff0c;而对于最后大力神杯的归属&#xff0c;相信很多人都满怀着期待&#xff0c;每个人心中都有不同的答案。 今天我就通过Python数据分析以及机…

低/无代码开发系统集成能力有多强?一文告诉你

Gartner预计&#xff0c;到2025年&#xff0c;公司将会有70&#xff05;的新应用软件使用到低/无代码技术。Statista的报告表明&#xff0c;在2027年的时候&#xff0c;在低/无代码技术上的花费将会达到650亿。 面对庞大的数字经济&#xff0c;许多公司都在加快数字化转型的步伐…

【Linux进程间通信】共享内存

共享内存API简单案例&#xff1a;一个进程往共享内存中写一次数据然后在另一块共享内存读一次数据&#xff0c;然后另一个进程在一个共享内存读一次数据在另一块共享内存写一次数据&#xff08;同时验证了它是半双工的&#xff09;使用信号量进行同步原理&#xff1a;多个进程映…