Kubernetes 服务发现之 Ingress
Ingress 是 Kubernetes 中用于管理外部访问集群内部服务的机制,通过七层负载均衡支持 HTTP 通信规则。它由 Ingress 策略和 Ingress Controller 组成,能够直接将请求反向代理到目标 Pod 上,从而绕过 kube-proxy 的转发。Ingress 对象需与 Service 对象处于同一命名空间,并且路径配置需注意避免其他路径被意外拦截。其工作流程包括定义 Ingress 规则、Ingress Controller 监听并应用这些规则来配置负载均衡器或反向代理,以及根据策略转发请求和服务响应。文章还提供了创建 Ingress Controller 和 Ingress 对象的具体示例资源清单及常用命令。
Kubernetes 服务发现之 Ingress 进阶
本文介绍了Ingress的进阶使用示例,包括实现重定向、路由跳转、自定义Nginx配置、CORS支持及限流功能。通过在Ingress对象的注解中设置相应参数,可以灵活地控制HTTP请求的行为。例如,利用`nginx.ingress.kubernetes.io/permanent-redirect`进行URL重定向,使用`nginx.ingress.kubernetes.io/rewrite-target`实现路径重写,以及通过`nginx.ingress.kubernetes.io/enable-cors`启用跨源资源共享等。此外,文章还提供了关于Ingress配置的一些注意事项,如确保路径定义清晰以避免冲突、正确处理HTTPS请求等,强调了理解和遵循这些规则的重要性,以确保高效且安全的服务部署。
Kubernetes 控制器之 ConfigMap
Kubernetes中的ConfigMap是一种用于存储非敏感信息的资源对象,它通过键值对形式向Pod提供配置信息,使得应用配置更加灵活且可移植。ConfigMap支持多种使用方式,包括作为环境变量、命令行参数或挂载为数据卷等,并且可以挂载多个ConfigMap以分离不同方面的配置。ConfigMap是命名空间级别的资源,可通过Kubernetes API进行管理。文章还提供了创建、更新、查看和删除ConfigMap的具体操作示例,如使用文件、env文件、字符串或者YAML格式定义的资源清单来创建ConfigMap。此外,介绍了如何通过修改资源清单或重新创建的方式来更新现有的ConfigMap。
Kubernetes 控制器之 StatefulSet
Kubernetes 中的 StatefulSet 是一种高级 API 对象,用于管理有状态应用的生命周期。它确保指定数量的 Pod 副本始终运行且是最新的,并通过保持 Pod 的有序性、持久性和唯一性来支持有状态应用。StatefulSet 控制器为每个 Pod 分配唯一的序号、提供持久化存储卷并保证其名称唯一,从而实现对数据的持续访问和个性化体验。此外,StatefulSet 支持滚动更新策略,允许逐步更新而不中断服务,并具备自动修复和版本回滚功能。通过无头服务(Headless Service),StatefulSet 还可以实现 Pod 间的直接通信。常用操作包括创建、更新、回滚、查看及删除 StatefulSet,以及调整副本数量。
Kubernetes 控制器之 ConfigMap 与 Secret 异同
ConfigMap和Secret都是Kubernetes中用于存储配置数据的资源,允许Pod通过环境变量或卷挂载访问这些信息。两者都可以使用命令行工具或API创建,并以键值对形式存储数据。当它们的内容更新时,相关的Pod需要手动重启才能获取到最新的配置。此外,ConfigMap与Secret都支持RBAC规则来管理访问权限。
不同之处在于:ConfigMap适用于非敏感数据(如普通配置文件),而Secret则专为敏感数据(如密码、令牌)设计;Secret中的数据默认加密存储于Etcd,提供更高安全性;ConfigMap不区分类型,但Secret有多种类型(例如Opaque);虽然ConfigMap理论上没有大小限制,但推荐不超过1MB,相比之下Secret由于加密原因通常具有更严格的大小约束;最后,在默认情况下,ConfigMap对所有用户开放,而Secret则需更加严格地控制访问权限。
Kubernetes 控制器之 Secret
Kubernetes中的Secret是一种用于存储敏感信息(如密码、密钥)的资源对象,它通过键值对的形式提供经过base64编码的数据给应用程序,增强了配置的灵活性和安全性。与ConfigMap不同,Secret支持多种类型(如Opaque, kubernetes.io/dockerconfigjson等),且自Kubernetes 1.7起,默认在etcd中以加密形式保存数据。Secret是命名空间级别的,并可通过Kubernetes API进行管理。创建Secret有多种方式,包括使用文件、环境变量文件、直接指定字符串或通过YAML文件定义;更新时可以通过修改后重新应用或直接更新YAML文件实现;查看和删除操作也提供了相应的命令行工具支持。
Kubernetes 控制器之 CronJob
CronJob 是 Kubernetes 中用于周期性执行任务的 API 对象,它基于时间调度配置,在指定时间创建并运行 Job。CronJob 适用于定时备份、检查等场景。其工作流程包括定义 CronJob 对象、监控状态、按计划生成 Job、执行任务、监控 Pod 状态、记录历史及清理资源。CronJob 支持复杂的时间表、并发策略、失败重试、暂停与恢复等功能,并允许设置时区和死信队列。通过 `cronjob.yaml` 文件可定义 CronJob,示例中展示了每天 00:10 执行打印数字的任务。常用操作包括创建、查看和删除 CronJob。

