【kubernetes/k8s概念】Cilium架构与概念

        Cilium着重强调了其在网络安全上的优势,可以透明的对Kubernetes等容器管理平台上的应用程序服务之间的网络连接进行安全防护。

        Cilium在设计和实现上,基于Linux的一种新的内核技术eBPF,可以在Linux内部动态插入强大的安全性、可见性和网络控制逻辑,相应的安全策略可以在不修改应用程序代码或容器配置的情况下进行应用和更新。

    eBPF使用场景包括

  • XDP
  • 流量控制
  • 防火墙
  • 网络包跟踪
  • 内核探针
  • cgroups
  • bcc
  • bpftools

1. Cilium 架构

        Cilium 位于容器编排系统和 Linux Kernel 之间,向上可以通过容器编排系统为容器进行网络以及相应的安全策略进行配置,向下可以在 Linux 内核 hook 点挂载 eBPF 程序,来控制容器网络数据的转发以及安全策略的实施。

   1.1 Cilium 组件

    Agent, cilium-agent 运行在集群的每一个 node 节点,接收上层的配置,包括通过 kubernetes 或者 API 来定义网络,服务负载均衡,网络策略,可见性和监控需求。cilium-agent 监听来自编排系统(例如 kubernetes)的事件,来了解容器或者 workloads 启动和停止。通过 CNI 插件与 CRI 和 kubernetes 交互, 生成 eBPF 程序,编译字节码,attach 到内核

    Client(CLI), 与 cilium-agent 一起安装的命令行工具,它与运行在同一节点上的 cilium-agent 的 REST API 交互。 CLI 允许检查本地 agent 的状态。 它还提供了直接访问 eBPF maps 以验证其状态的工具。

    Operator, Cilium Operator 负责管理集群,逻辑上应该为整个集群处理一次,而不是为集群中的每个节点处理一次。 主要是节点之间资源信息的同步、确保 Pod DNS 更新管理、集群 NetworkPolicy 的管理和更新等。

    CNI Plugin,配置容器网络, 使村里通网

  

2. Cilium 部署安装

  2.1 系统需求

RequirementMinimum VersionIn cilium container
Linux kernel>= 4.9.17no
Key-Value store (etcd)>= 3.1.0no
Key-Value store (consul)>= 0.6.4no
clang+LLVM>= 10.0yes
iproute2>= 5.0.0 [1]yes
[1](12) Requires support for eBPF templating as documented below.

   2.2 Mounted eBPF filesystem

    # mount bpffs /sys/fs/bpf -t bpf

     或者在 /etc/fstab 加入开机 mount 操作

      bpffs /sys/fs/bpf bpf defaults 0 0

   2.3 安装 cilium 

kubectl create -f https://raw.githubusercontent.com/cilium/cilium/v1.8.8/install/kubernetes/quick-install.yaml

   注意: 如果未安装 kube-proxy 组件,需要修改 configmap cilium-config 配置添加  k8s-api-server: https://172.16.236.230:6443, 否则 cilium 连不到 kube-apiserver

  2.4 取消 kube-proxy 组件

   Cilium 宣称已经全面实现取代 kube-proxy 的功能,包括ClusterIP, NodePort, ExternalIPs 和 LoadBalancer, 验证是否可以停止 kube-proxy 组件   

kubectl exec -it -nkube-system cilium-8vds2  -- cilium status | grep KubeProxyReplacement

KubeProxyReplacement:   Probe   [NodePort (SNAT, 30000-32767), ExternalIPs, HostReachableServices (TCP, UDP)]

    查看Cilium保存的应用服务访问列表

> kubectl exec -it -n kube-system [Cilium-agent-pod] -- cilium service list

    将kube-proxy nodeSelector设置为不存在的node,也就是禁止kube-proxy, 该步骤可选执行,如果不需要 kube-proxy 

kubectl patch ds -n kube-system kube-proxy -p '{"spec":{"template":{"spec":{"nodeSelector":{"non-calico": "true"}}}}}'

参考:

    https://docs.cilium.io/en/v1.10/concepts/overview/

    https://docs.cilium.io/en/v1.10/concepts/networking/routing/

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Kubernetes 的网络系统是由多个组件组成的, 它们协作为应用程序提供网络连接和通信. 其中一些主要的组件包括: - kube-proxy: 运行在每个节点上, 负责为 Pod 和 Service 提供代理服务. - kube-dns: 为应用程序提供 DNS 服务. - 网络插件: 用于为 Pod 提供网络连接, 支持不同的网络模型, 如 Calico, Flannel, Cilium 等. - Service: 为应用程序提供负载均衡和服务发现. Kubernetes 的网络模型是基于 Pod 的, 每个 Pod 都有一个独立的 IP 地址, 使得容器间直接通信成为可能. Service 则提供了一种发现和负载均衡的机制, 让外部客户端可以访问 Pod. ### 回答2: KubernetesK8s)是一个开源的容器编排平台,用于自动化部署、扩展和管理容器化应用程序。下面是一些与K8s网络相关的知识点。 1. 服务发现:K8s通过DNS(域名系统)服务提供内部服务发现机制。每个服务都会被分配一个唯一的域名,其他服务可以通过该域名访问该服务。 2. Pod网络:Pod是K8s中的最小调度单元,它可以包含一个或多个容器。每个Pod都有一个唯一的IP地址,容器可以通过本地回环地址访问其他Pod中的容器。 3. 容器网络接口(CNI):CNI是一个规范,用于定义容器网络的实现方式。K8s使用CNI插件来设置和管理Pod的网络。不同的CNI插件可以支持不同的网络方案,如VLAN、VXLAN、Calico等。 4. 服务代理:K8s使用服务代理来实现服务之间的通信。服务代理可以在集群各个节点上运行,并通过负载均衡来分发到后端Pod。 5. 网络策略:K8s允许用户通过网络策略来定义集群中的网络访问规则。网络策略可以限制哪些Pod可以与另一个Pod通信,以及允许的协议和端口。 6. Ingress控制器:Ingress控制器是K8s中用于管理入站网络流量的组件。它可以将外部流量路由到集群内部的服务,并提供负载均衡和SSL终止等功能。 7. 可插拔网络解决方案:K8s提供了一些可插拔的网络解决方案,如Flannel、Calico等。这些解决方案可以根据具体需求选择,以提供不同的网络拓扑结构和性能。 总而言之,K8s网络相关的知识点包括服务发现、Pod网络、CNI、服务代理、网络策略、Ingress控制器和可插拔网络解决方案。这些知识点帮助我们理解和管理K8s集群中的网络配置和通信。 ### 回答3: Kubernetes(简称k8s)是一种用于容器编排和管理的开源平台,它涉及到一些重要的网络概念和组件。 首先,k8s网络模型是基于虚拟网络的概念。每个k8s集群中的容器都会被分配一个独立的IP地址,并且可以通过这个IP地址跨节点进行通信。这是通过一个称为kube-proxy的组件实现的,它会在每个节点上监听API服务器上的变化,并使用iptables或者IPVS等工具在宿主机上进行流量转发。 其次,k8s通过Service和Endpoint来暴露和访问容器。Service是一个逻辑概念,用于封装一组具有相同功能的容器,在集群内部提供服务的访问入口。一个Service可以通过ClusterIP、NodePort或者LoadBalancer等不同的类型暴露。而Endpoint是实际运行容器的IP和端口的集合,用于告诉Service流量应该转发到哪里。 此外,k8s还支持Ingress资源,用于在集群外部暴露服务,实现外部访问。Ingress通过定义一个或多个规则,将外部流量转发到不同的Service上,从而实现域名或路径的复杂路由。 最后,网络插件是k8s网络中的重要组件。k8s提供了一些默认的网络插件,如Flannel、Calico等,用于管理Pod之间的网络通信。网络插件负责创建网络的子网和路由表,并将Pod的IP地址与宿主机的虚拟网卡进行关联。 总结来说,k8s网络涉及到虚拟网络、kube-proxy、Service、Endpoint、Ingress等概念和组件,这些都是为了实现容器间的通信和外部访问的需求。不同的网络插件可以根据具体需求选择,以满足集群的网络需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值