Cilium 官方文档翻译(3)术语

Labels

标签是一种通用、灵活和高度可扩展的寻址大型资源集的方法,因为它们允许任意分组和创建集。每当需要描述、寻址或选择某个内容时,都会根据标签行。

  • Endpoint 是从容器运行时、编排系统或其他源派生的指定标签。
  • Network Policy 基于标签选择进行通信的Endpoint对。策略本身也由标签标识。

什么是Lable

标签是由键和值组成的一对字符串。标签可以格式化为带有格式key=value的单个字符串。key部分是必须且唯一的。这通常是通过使用反向域名概念实现的,例如io.cilium.mykey=myvalue。值部分是可选的,可以省略,例如io.cilium.mykey
键名称通常应由字符集[a-z0-9-.]组成。
使用标签选择资源时,键和值必须匹配,例如,当策略应应用于标签为my.corp.foo的所有端点时,标签my.corp.5oo=bar将与选择器不匹配。

标签来源

标签可以从各种来源派生。例如,Endpoint将通过本地容器运行时派生与容器关联的标签,以及Kubernetes提供的与pod关联的标签。由于这两个标签名称空间彼此不知道,这可能会导致标签键冲突。
为了解决这一潜在冲突,Cilium在导入标签时将所有标签键前缀为source:,以指示标签的来源,例如k8s:role=frontendcontainer:user=joek8s:role=backend。这意味着当您使用docker run […] -l foo=bar 运行Docker容器时,标签container:foo=bar将出现在代表容器的Cilium Endpoint上。类似地,以标签foo:bar开头的Kubernetes pod将用与标签k8s:foo=bar关联的Cilium Endpoint表示。为每个潜在源分配一个唯一的名称。当前支持以下标签源:

  • container: for labels derived from the local container runtime
  • k8s: for labels derived from Kubernetes
  • reserved: for special reserved labels, see Special Identities.
  • unspec: for labels with unspecified source

当使用标签来标识其他资源时,可以包含源以限制标签与特定类型的匹配。如果未提供源,则标签源默认为any:,它将匹配所有标签,而不管其源是什么。如果提供了源,则需要匹配选择和匹配标签的源。

Endpoint

Cilium通过分配IP地址使应用程序容器在网络上可用。多个应用程序容器可以共享同一IP地址;该模型的典型示例是Kubernetes Pod。所有共享公共地址的应用程序容器都被分组在Cilium所指的一个端点中。
分配独立的IP地址可以让每个端点使用4层所有端口。这实际上允许在同一集群节点上运行的多个应用程序容器都绑定到众所周知的端口,如80,而不会导致任何冲突。
Cilium的默认行为是为每个端点分配IPv6和IPv4地址。但是,可以将此行为配置为仅使用--enable-ipv4=false选项仅分配IPv6地址。如果同时分配了IPv6和IPv4地址,则可以使用任一地址访问端点。同样的行为也适用于策略规则、负载平衡等。有关更多详细信息,请参阅IP地址管理(IPAM)。

身份识别

为了便于识别,Cilium为集群节点上的所有端点分配一个内部端点id。端点id在单个集群节点的上下文中是唯一的。

Endpoint Metadata

Endpoint自动从与Endpoint关联的应用程序容器中派生元数据。然后,可以使用元数据来识别端点,以实现安全/策略、负载平衡和路由目的。
元数据的来源将取决于使用的编排系统和容器运行时。当前支持以下元数据检索机制:

SystemDescription
KubernetesPod labels (via k8s API)
containerd (Docker)Container labels (via Docker API)

元数据以标签的形式附着到Endpoint。
下面的示例启动一个带有标签app=benchmark的容器,该容器随后与端点关联。标签前缀为container:,表示标签是从容器运行时派生的。

$ docker run --net cilium -d -l app=benchmark tgraf/netperf
aaff7190f47d071325e7af06577f672beff64ccc91d2b53c42262635c063cf1c
$  cilium endpoint list
ENDPOINT   POLICY        IDENTITY   LABELS (source:key[=value])   IPv6                   IPv4            STATUS
           ENFORCEMENT
62006      Disabled      257        container:app=benchmark       f00d::a00:20f:0:f236   10.15.116.202   ready

端点可以具有来自多个源的关联元数据。一个典型的例子是Kubernetes集群,它使用containred作为容器运行时。端点将派生Kubernetes pod标签(前缀为k8s:)和容器标签(前缀是container:)。

Identity

所有Endpoint都被分配了一个标识。标识是用来加强Endpoint之间的基本连接的。在传统的网络术语中,这相当于第3层的实施。
Identity由标签标识,并被赋予集群范围内的唯一标识符。为Endpoint分配的标识与端点的安全相关标签相匹配,即共享同一组安全相关标签的所有端点将共享相同的标识。这个概念允许将策略实施扩展到大量端点,因为随着应用程序的扩展,许多单独的端点通常会共享同一组安全标签。

什么是一个标识

Endpoint的标识是基于与派生到Endpoint的pod或容器关联的标签来派生的。启动pod或容器时,Cilium将基于容器运行时接收到的事件创建Endpoint,以表示网络上的pod或容器。作为下一步,Cilium将解析创建的Endpoint的身份。每当Pod标签更改时,都会重新确认身份,并根据需要自动修改。

安全相关标签

在派生标识时,并非所有与容器或Pod关联的标签都有意义。标签可用于存储元数据,例如容器启动时的时间戳。Cilium需要知道哪些标签是有意义的,并且在推导身份时需要考虑这些标签。为此,用户需要指定有意义标签的字符串前缀列表。标准行为是包括以前缀id开头的所有标签,例如id.service1id.services2id.groupA.service44。启动agent时可以指定有意义的标签前缀列表。

特定的标识

Cilium管理的所有Endpoint都将被分配一个标识。Cilium设计特殊标识表示允许与不受Cilium管理的网络端点通信。

IdentityNumeric IDDescription
reserved:unknown0The identity could not be derived.
reserved:host1The local host. Any traffic that originates from or is designated to one of the local host IPs.
reserved:world2Any network endpoint outside of the cluster
reserved:unmanaged3An endpoint that is not managed by Cilium, e.g. a Kubernetes pod that was launched before Cilium was installed.
reserved:health4This is health checking traffic generated by Cilium agents.
reserved:init5An endpoint for which the identity has not yet been resolved is assigned the init identity. This represents the phase of an endpoint in which some of the metadata required to derive the security identity is still missing. This is typically the case in the bootstrapping phase.
The init identity is only allocated if the labels of the endpoint are not known at creation time. This can be the case for the Docker plugin.
reserved:remote-node6The collection of all remote cluster hosts. Any traffic that originates from or is designated to one of the IPs of any host in any connected cluster other than the local node.
reserved:kube-apiserver7Remote node(s) which have backend(s) serving the kube-apiserver running.

cilium 的所有本地和远程主机都会默认设置reserved:host主机标识,也可以通过enable-remote-node-identity选项单独启动远程主机标识设置。

众所周知的标识

以下是Cilium自动识别的已知身份列表,它将在不需要联系任何外部依赖项(如kvstore)的情况下分发安全身份。这样做的目的是允许引导Cilium,不依赖于任何依赖项,在群集中通过策略强制实现基本服务的网络连接。

DeploymentNamespaceServiceAccountCluster NameNumeric IDLabels
kube-dnskube-systemkube-dns102k8s-app=kube-dns
kube-dns (EKS)kube-systemkube-dns103k8s-app=kube-dns, eks.amazonaws.com/component=kube-dns
core-dnskube-systemcoredns104k8s-app=kube-dns
core-dns (EKS)kube-systemcoredns106k8s-app=kube-dns, eks.amazonaws.com/component=coredns
cilium-operatorcilium-operator105name=cilium-operator, io.cilium/app=operator

集群中的标识管理器

标识在整个集群中有效,这意味着如果在多个集群节点上启动多个pods或容器,如果它们共享与标识相关的标签,则所有pod或容器都将解析并共享一个标识。这需要集群节点之间的协调。
image.png

解析Endpoint标识的操作是在分布式键值存储的帮助下执行的,该存储允许以生成新唯一标识符的形式执行原子操作,如果以前没有看到以下值。这允许每个集群节点创建与标识相关的标签子集,然后查询键值存储以派生标识。根据之前是否查询过标签集,将创建新标识,或者返回初始查询的标识。

Node

Cilium将节点称为集群的单个成员。每个节点都必须运行cilium-agent,并且将以最自治的方式运行。为了简单和可扩展,在不同节点上运行的Cilium代理之间的状态同步保持在最低限度。它只通过键值存储或数据包元数据发生。

Node Address

Cilium将自动检测节点的IPv4和IPv6地址。当cilium-agent启动时,会打印出检测到的节点地址:

Local node-name: worker0
Node-IPv6: f00d::ac10:14:0:1
External-Node IPv4: 172.16.0.20
Internal-Node IPv4: 10.200.28.238

参考资料

  1. 原文:https://docs.cilium.io/en/v1.11/concepts/terminology/
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值