Loading...
墨滴

MoeLove

2021/05/29  阅读:55  主题:红绯

K8S 生态周报| Cilium v1.10.0 带来 Egress Gateway 等特性

「K8S 生态周报」内容主要包含我所接触到的 K8S 生态相关的每周值得推荐的一些信息。欢迎订阅知乎专栏「k8s生态」[1]

KIND v0.11.0 正式发布

KIND (Kubernetes In Docker)[2] 关注我的小伙伴想必已经都很熟悉了,这是我一直都在参与也用的非常多的一个项目,它可以很方便的使用 Docker 容器作为 Kubernetes 的 Node ,快速的启动一个/或多个测试集群。自上个版本发布以来已经过了 4 个月,我们一起来看看这个版本中有哪些值得注意的变更吧!

破坏性变更

  • 在这个版本中默认的 k8s 版本为 v1.21.1;
  • 移除掉了使用 bazel 构建镜像的方式,kind build node-image--type 参数已废弃;
  • kind build node-image--kube-root 参数已废弃,将会按照标准模式寻找 k8s 的代码目录的位置;

新特性

  • kind build node-image 新增了一个 --arch 的参数,可支持构建多架构的镜像了;
  • KIND 当前发布的预构建镜像,已经都是 multi-arch 的了,可运行在 amd64 和 arm64 架构上;
  • 当前 KIND 已经可以运行在 rootless 模式下的 Docker 和 rootless 模式下的 Podman 中了,详细指南请参考 KIND 运行在 rootless 模式[3] ;
  • KIND 默认的 CNI kindnetd 已经支持了双栈网络, 并在 v1.21 版本的 k8s 中默认启用 ;

你可以通过以下任意方式安装最新版的 KIND :

  • GO111MODULE="on" go get sigs.k8s.io/kind@v0.11.0;
  • wget -O kind https://kind.sigs.k8s.io/dl/v0.11.0/kind-linux-amd64;
  • clone KIND 的代码仓库后,执行 make build ;

更多关于 KIND 的使用及说明请参考官方文档:https://kind.sigs.k8s.io/ 欢迎下载使用。

apisix-ingress-controller v0.6.0 发布

Apache APISIX Ingress controller[4] 是 Apache APISIX 的控制面组件,可以将其自定义资源(CR)及 Kubernetes 中原生的 Ingress 资源发布至 APISIX 中,进而利用 APISIX 作为入口网关管理南北向的流量。 我们一起来看看本次发布的 v0.6.0 版本中带来了哪些值得注意的变更吧:

  • #115 支持了 TCP 代理;
  • #242 为已经被 ingress controller 推送的资源增加了 label;
  • ApisixUpstreamApisixTls 增加了 jsonschema 校验;
  • #394 记录了资源处理时的 Kubernetes events;
  • #395 支持上报资源的 status;
  • #402 为 cluster 级别的插件增加 global_rules 配置;

Cilium v1.10.0 正式发布

Cilium v1.10.0 - https://moelove.info
Cilium v1.10.0 - https://moelove.info

Cilium 我在之前的文章中已经介绍过很多次了,它基于 eBPF 技术,可以为 Kubernetes 中应用程序服务间网络和 API 连接提供透明代理和保护。 想快速了解 Cilium 可以参考我之前写的 《Cilium 快速上手》 想快速了解 eBPF 也可以看看我在 PyCon China 2020 上做的分享。

Cilium v1.10 版本是一个比较大的特性版本,在这个版本中带来了众多值得关注的特性,我们一起来看看吧!

Egress IP Gateway

在几乎所有网络组件都在做入口网关的时候, Cilium 发现当把云原生应用和传统应用集成时,传统应用大多通过 IP 白名单的方式进行授权, 加上 Pod IP 的动态性,对 IP 地址的管理就成为了一个痛点。

现在 Cilium 新版本中,通过新的 Kubernetes CRD ,可以在数据包离开 Kubernetes 集群时将静态 IP 与流量相关联,这使得外部防火墙会使用此一致的静态 IP 去识别 Pod 流量。

其实就是 Cilium 帮忙做了 NAT ,使用起来也很简单:

apiVersion: cilium.io/v2alpha1
kind: CiliumEgressNATPolicy
metadata:
  name: egress-sample
spec:
  egress:
  - podSelector:
      matchLabels:
        # The following label selects default namespace
        io.kubernetes.pod.namespace: default
  destinationCIDRs:
  - 192.168.33.13/32
  egressSourceIP: "192.168.33.100"

上述的配置就是说:使用 egressSourceIP 中配置的 IP 来处理来自于 default 命名空间中 Pod 的出口流量了。

BGP 集成的支持

很多小伙伴放弃 Cilium 的一大原因可能是因为 BGP 的支持,但从这个版本开始就不用担心了!

Cilium 通过集成 MetalLB 来进行的,以此来达到 BGP L3 协议支持,这样 Cilium 可以为 LoadBalancer 类型的服务分配 IP ,并通过 BGP 将其通告的路由器,这样外部的流量就可以正常的访问到服务了。

配置 BGP 支持的方式也很简单:

apiVersion: v1
kind: ConfigMap
metadata:
  name: bgp-config
  namespace: kube-system
data:
  config.yaml: |
    peers:
    - peer-address: 10.0.0.1
      peer-asn: 64512
      my-asn: 64512
    address-pools:
    - name: default
      protocol: bgp
      addresses:
      - 192.0.2.0/24

主要就是 peers 用于和网络中现有的 BGP 路由器互联,address-pools 则是 Cilium 为 LoadBalancer 分配的 IP 池。

基于 XDP 的独立负载均衡

Cilium 基于 eBPF 的负载均衡器最近增加了对 Maglev 一致性哈希的支持,以及 eXpress(XDP) 层上转发平面的加速,这些特性使得它也可以作为独立的 4 层负载均衡存在。

Cilium XDP L4LB 具有完整的 IPv4/IPv6 双栈支持,可以独立于 Kubernetes 集群独立部署,作为一个可编程的 L4 LB 存在。

其他

另外就是增加了对 Wireguard 的支持,进行 Pod 间流量的加密;增加了一个新的 Cilium CLI ,用于管理 Cilium 集群;以及 比以往更加优异的性能!

更多关于 Cilium 项目的变更,请参考其 ReleaseNote

上游进展

  • runc 发布了 v1.0-rc95 版本,大概是 v1.0 前的最后一个版本了;

  • CNCF 网络小组定义了一套 Service Mesh Performance 的规范[5],通过此规范来达成一个统一的标准,用来衡量 Service Mesh 的性能情况;

  • CNCF 网络小组定义了一套 Service Mesh Performance 的规范,通过此规范来达成一个统一的标准,用来衡量 Service Mesh 的性能情况;


欢迎订阅我的文章公众号【MoeLove】

TheMoeLove
TheMoeLove

参考资料

[1]

k8s生态: https://zhuanlan.zhihu.com/container

[2]

KIND 项目: https://github.com/kubernetes-sigs/kind

[3]

KIND with rootless: https://kind.sigs.k8s.io/docs/user/rootless/

[4]

Apache APISIX Ingress controller: https://github.com/apache/apisix-ingress-controller/

[5]

Service Mesh Performance 的规范: https://smp-spec.io/

MoeLove

2021/05/29  阅读:55  主题:红绯

作者介绍

MoeLove