摘要: Hashicorp 发布了可以更好地集成 Consul 与 Kubernetes 的新特性。这些特性包括支持使用官方提供的 Helm Chart 在 Kubernetes 上安装 Consul、Kubernetes 服务与 Consul 自动同步、外部 Consul 代理自动加入 Kubernetes 集群、支持 Envoy 和注入器,使用户可以使用 Connect 保护 Pod。
Hashicorp 发布了可以更好地集成Consul(一个服务网格和KV存储)与Kubernetes的新特性。这些特性包括支持使用官方提供的 Helm Chart 在 Kubernetes 上安装 Consul、Kubernetes 服务与 Consul 自动同步、外部 Consul 代理自动加入 Kubernetes 集群、支持 Envoy 和注入器,使用户可以使用 Connect 保护 pod。这些新特性可以为 Kubernetes 集群之间的跨集群通信提供便利,或者用在异构工作负载和环境里。
作为集成的一部分,Hashicorp 将重点放在了增强而不是替换 Kubernetes 上。他们利用了核心的 Kubernetes 工作流组件,如服务、ConfigMaps 和 Secrets,在这些核心原语之上进行构建。这使得像 Consul 目录同步这样的特性可以将外部服务转换为一等的 Kubernetes 服务。
现在,Consul 有一个官方提供的Helm Chart,可以安装在 Kubernetes 中,使得完整的 Consul 设置在几分钟内就可以完成。这个设置可以是服务器集群,也可以是客户端代理,或者两者兼而有之。
在克隆并检出最新标记的版本后,你可以使用下面的命令安装 Chart:
这会安装一个包含三个节点的、完全自引导的服务器集群,每个 Kubernetes 节点上运行一个 Consul 代理。然后,你可通过从一个服务器 pod 转发端口 8500 来查看 Consul UI:
Helm Chart 是完全可配置的,允许禁用组件、更改镜像、暴露 UI 服务、配置资源和存储类。有关详细信息,请查看可配置选项的完整列表。通过调整配置,你可以部署一个仅限客户端的集群,如果你的 Consul 服务器运行在 Kubernetes 集群之外,那么这个集群会非常有用,配置示例如下所示:
Join 配置将使用云的 auto-join 特性来发现并加入先前已存在的 Consul 服务器代理。
Auto-join特性增强了,它可以利用 Kubernetes API 发现正在运行 Consul 代理的 pod。这代替了使用静态 IP 地址或 DNS 来实现加入。
Consul 将使用用于 kubectl 身份验证的标准 kubeconfig 文件进行 Kubernetes 身份验证。它会在标准位置搜索这个文件。连接之后,你可以命令 Consul 基于标签自动加入:
这个命令将要求代理从 Kubernetes 中查询带有标签 app=consul 和 component=server 的 pod。如果没有发现 pod,则 Consul 将定期重试此命令。这可以供 Kubernetes 集群之外的代理使用。
Kubernetes 服务现在已经自动同步到 Consul 目录。Consul 用户可以通过 Consul DNS 或 HTTP API 发现这些服务。它使用标准的 Kubernetes 工具来注册服务,这就是说,如果将服务移动到新的 pod 或者服务伸缩,那么 Consul 目录会保持最新。这还允许非 Kubernetes 工作负载通过 Consu 连接到 Kubernetes 服务。
目前,这个同步过程只包括 NodePort 服务、LoadBalancer 服务和具有外部 IP 集的服务。下面是一个标准 LoadBalancer 服务配置的示例:
一旦运行,你就可以在 Kubernetes 之外查询服务:
为了可以在 Consul UI 中区分它们,外部注册的服务会有一个 Kubernetes 图标。
最后,Consul 服务可以注册成一等的 Kubernetes 服务。这使得 Kubernetes 用户可以通过 Kubernetes API 连接到它们。但是,这需要在 Kubernetes 中配置 Consul DNS。这个同步过程可以通过 Helm Chart 来运行:
还有其他的选项可以用于更深层次的配置。这个功能也是开源的,是consult -k8s项目的一部分。现在,有了原生 Kubernetes 注入器,你可以使用Connect保护你的pod。Connect 借助自动 TLS 加密和基于身份的认证实现了安全的服务到服务通信。这样,运行 Envoy 的 Connect sidecar(一个 Connect 代理)就可以自动注入到 pod,实现 Kubernetes 配置自动化。如果 pod 有适当的注解,则 Envoy 将自动配置、启动,并能够通过 Connect 接受和建立连接。下面是一个为入站流量配置了 Connect 的 Redis 服务器示例:
然后,我们可以配置一个 Redis UI 通过 Connect 与 Redis 通信。该 UI 将被配置为与本地主机端口通信,从而通过代理进行连接。注入器还将向容器中注入任何必要的环境变量。
Kubernetes Connect 注入器可以使用 Helm Chart 运行。每个客户端代理都需要为 Envoy 代理启用 gRPC。
这些新特性简化了在 Kubernetes 上运行 Consul 的过程。此外,Hashicorp 认为,借助自动加入和同步功能,可以简化在集成非 Kubernetes 工作负载的环境中的运行。除了这些新特性之外,Hashicorp 还在努力将 Terraform 和 Vault 与 Kubernetes 集成,并计划在未来几个月内发布。
查看英文原文:
https://www.infoq.com/news/2018/11/consul-kubernetes
评论 1 条评论