文章目录
概述
Kubernetes注解(Annotations)是一种将非标识性元数据附加到Kubernetes对象的方法。这些对象可以是Pods、Deployments、Services等。注解与标签(Labels)不同,它们不用于识别和选择对象,而是存储额外的信息,这些信息对于工具和库来说是可检索的。
注解的功能:
- 存储额外信息:注解可以用来存储关于Kubernetes资源的额外信息,例如构建信息、文档链接、维护者联系信息等 。
- 自动化和策略传递:注解可以标记资源以用于未来的自动化任务,例如调度、升级、配置管理等 。
- 集成外部系统:注解可以用于集成Kubernetes与外部系统,如监控工具、CI/CD管道等 。
- 工作流自动化:注解可以触发自定义动作或配置特定行为,如备份、迁移过程或资源预热 。
注解的使用场景:
- 部署跟踪:注解可以用来跟踪Kubernetes资源的部署历史,例如存储应用的版本信息 。
- 自动化扩展:注解可以用于触发资源的自动扩展,如根据自定义指标配置水平Pod自动伸缩(HPA)。
- 文档链接:注解可以链接到相关文档,如设计提案、运行手册、警报和仪表板 。
- 所有权和联系人信息:注解可以记录资源的所有者、联系人和升级信息等 。
注解的语法和特点:
- 注解以键/值对的形式存在,键可以有一个可选的前缀和一个名称,值是字符串。
- 注解的键可以包含字母数字字符、破折号、下划线、点等,且没有长度限制。
- 注解的值可以是任意字符串,没有类型限制。
示例:
apiVersion: v1
kind: Pod
metadata:
name: example-pod
annotations:
"key1": "value1"
"key2": "value2"
spec:
containers:
- name: example-container
image: example-image
在这个示例中,key1和key2是注解的键,value1和value2是对应的值。
使用注解的最佳实践:
- 保持注解的数量有限,通常每个资源对象不超过10个注解。
- 拥有注解的团队应该负责清理不再适用的注解,而不是让过时的注解积累。
- 投资于能够查询和报告注解的工具,这可以提供强大的仪表板和洞察力。
- 谨慎使用注解,它们应该补充而不是完全取代其他记录系统的概念,如标签和状态字段 。
注解在Ingress当中的使用
常见注解列表
以下是Kubernetes Ingress支持的一些常用注解,以及它们的用途说明:
| 注解名称 | 用途 |
|---|---|
kubernetes.io/ingress.class | 指定应该使用哪个Ingress控制器来处理此Ingress资源。例如,如果你的集群中有多个Ingress控制器(如Nginx和Traefik),你可以使用这个注解来指定使用哪一个。 |
nginx.ingress.kubernetes.io/rewrite-target | 对于Nginx Ingress控制器,此注解用于重写URL的路径部分。例如,如果你希望将所有到达 /app 路径的请求重定向到 /,你可以使用这个注解。 |
nginx.ingress.kubernetes.io/ssl-redirect | 指示Nginx Ingress控制器将所有HTTP请求重定向到HTTPS。通常用于强制HTTPS。 |
nginx.ingress.kubernetes.io/force-ssl-redirect | 类似于 ssl-redirect,但更为严格。它会强制将所有HTTP请求重定向到HTTPS,并拒绝任何非HTTPS的请求。 |
nginx.ingress.kubernetes.io/affinity | 设置客户端IP的会话保持策略,以确保来自同一客户端的请求被路由到同一个后端Pod。 |
nginx.ingress.kubernetes.io/configuration-snippet | 允许你在Nginx的配置文件中插入自定义的片段。这可以用于实现Nginx的某些高级功能,这些功能不能通过标准的Ingress资源字段或注解来实现。 |
traefik.ingress.kubernetes.io/router.entrypoints | 对于Traefik Ingress控制器,此注解用于指定入口点(即监听的网络地址和端口)。 |
traefik.ingress.kubernetes.io/router.middlewares | 允许你在Traefik Ingress上附加中间件,以处理诸如重定向、重写、认证等任务。 |
cert-manager.io/cluster-issuer | 当使用cert-manager来自动管理TLS证书时,此注解指定了应该使用哪个ClusterIssuer来签发证书。 |
haproxy.org/ingress.class | 对于HAProxy Ingress控制器,类似于 kubernetes.io/ingress.class,用于指定Ingress类。 |
haproxy.org/path-rewrite | 在HAProxy Ingress控制器中,用于重写请求的路径。 |
这些注解的具体可用性和行为可能因Ingress控制器的版本和配置而异。在使用之前,建议查阅相应Ingress控制器的官方文档以获取最准确的信息。此外,随着Kubernetes和Ingress控制器生态系统的不断发展,新的annotations可能会不断被引入。
举例说明
当然,这里有一个使用Nginx Ingress控制器的Kubernetes Ingress资源的例子,其中使用了多个注解来配置不同的功能:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: example-ingress
annotations:
# 指定默认的后端服务,当请求不匹配任何规则时
nginx.ingress.kubernetes.io/default-backend: "default-http-backend:80"
# 开启CORS支持,并设置允许的源
nginx.ingress.kubernetes.io/enable-cors: "true"
nginx.ingress.kubernetes.io/cors-allow-origin: "*"
# 重写目标URL
nginx.ingress.kubernetes.io/rewrite-target: /$1
# 设置请求头Host的值
nginx.ingress.kubernetes.io/upstream-vhost: "example.com"
# 启用基于cookie的会话亲和性
nginx.ingress.kubernetes.io/affinity: "cookie"
nginx.ingress.kubernetes.io/session-cookie-name: "INGRESSCOOKIE"
nginx.ingress.kubernetes.io/session-cookie-path: "/"
# IP白名单,只允许特定IP范围的访问
nginx.ingress.kubernetes.io/whitelist-source-range: "192.168.0.0/16,10.0.0.0/8"
# 为特定的路径设置重定向
nginx.ingress.kubernetes.io/permanent-redirect: "https://www.example.com/newpath"
nginx.ingress.kubernetes.io/permanent-redirect-code: "301"
spec:
rules:
- host: example.com
http:
paths:
- path: /path/to/rewrite(/|$)(.*)
pathType: Prefix
backend:
service:
name: my-service
port:
number: 80
- path: /path/to/redirect
pathType: Exact
backend:
service:
name: my-service
port:
number: 80
在这个例子中,我们定义了一个名为example-ingress的Ingress资源,并使用了一系列注解来配置不同的功能:
-
nginx.ingress.kubernetes.io/default-backend注解指定了默认后端服务,用于处理不匹配任何规则的请求。 -
nginx.ingress.kubernetes.io/enable-cors和nginx.ingress.kubernetes.io/cors-allow-origin注解开启了CORS支持,并设置了允许的源为所有域(*)。 -
nginx.ingress.kubernetes.io/rewrite-target注解用于重写URL路径。 -
nginx.ingress.kubernetes.io/upstream-vhost注解设置了请求头Host的值。 -
nginx.ingress.kubernetes.io/affinity、nginx.ingress.kubernetes.io/session-cookie-name和nginx.ingress.kubernetes.io/session-cookie-path注解启用了基于cookie的会话亲和性。 -
nginx.ingress.kubernetes.io/whitelist-source-range注解设置了IP白名单,只允许特定IP范围的访问。 -
nginx.ingress.kubernetes.io/permanent-redirect和nginx.ingress.kubernetes.io/permanent-redirect-code注解为特定的路径设置了301永久重定向。
请注意,这些注解的具体行为可能因Ingress控制器的不同而有所差异,因此在使用前应查阅相应Ingress控制器的官方文档。此外,注解的使用也可能受到Kubernetes集群配置的影响。
🛠️ 在Kubernetes中,注解和标签有什么区别?
在Kubernetes中,注解(Annotations)和标签(Labels)都是以键/值对的形式附加到Kubernetes资源对象上(如Pods、Services、Deployments等)的元数据。尽管它们的格式相似,但它们的用途和特点有所不同:
标签(Labels):
- 目的:标签主要用于识别和选择资源。它们用于分组和选择资源的子集,例如,使用标签可以选择一组具有特定角色或功能的Pod。
- 限制:标签的键和值都有长度限制(63个字符以内),并且必须符合DNS子域名的标准(字母数字字符,以及破折号
-)。 - 查询:标签支持使用Kubernetes API和CLI工具(如
kubectl)进行查询和观察,这使得它们非常适合在UI和CLI中使用。 - 用途:标签通常用于逻辑分组、服务发现、路由和负载分配等场景。
注解(Annotations):
- 目的:注解用于存储非标识性的元数据,例如构建信息、文档链接、维护者联系信息等。它们不用于选择或筛选资源。
- 灵活性:注解的键和值没有长度限制,可以包含更丰富的字符集,包括破折号、下划线、点等。
- 查询:虽然注解可以通过Kubernetes API检索,但它们不支持像标签那样的查询语法。
- 用途:注解通常用于存储额外的信息,这些信息对于开发人员、运维人员或自动化工具是有用的,但不用于资源的选择或分组。
主要区别:
- 标识性:标签用于标识和选择资源,而注解用于存储额外的、非标识性的信息。
- 查询能力:标签支持查询和观察,注解不支持这种查询方式。
- 字符限制:标签的键和值有严格的字符和长度限制,注解则没有这些限制。
- 使用场景:标签常用于逻辑分组和选择资源,注解用于存储辅助信息,如构建数据、文档链接、维护者信息等。
在实际应用中,你可以根据资源的需要选择合适的标签或注解来组织和管理你的Kubernetes资源。通常,标签用于资源的逻辑分组和选择,而注解用于附加额外的、不用于选择的元数据。
649

被折叠的 条评论
为什么被折叠?



