【问题标题】:Consul agent on kubernetes, on node or pod?Kubernetes、节点或 pod 上的领事代理?
【发布时间】:2021-10-16 05:28:44
【问题描述】:

我通过 terraform 部署了一个 aws eks 集群。我还按照 hasicorp 的教程部署了 Consul,我在 consul 的 UI 中看到了节点。

现在我想知道领事代理如何知道我部署的 pod?我部署了一些东西,但它没有显示在 consul 的任何地方。

我找不到任何关于如何通过节点的 consul 代理在 consul 上注册 pod(服务)的文档,我需要在某个地方进行配置吗?我不应该使用节点的代理并直接从 pod 注册服务吗? Hashicorp 不鼓励这样做,因为它可能会增加资源利用率,具体取决于在给定节点上部署的 Pod 数量。但是,节点的代理如何知道我在该节点上部署的服务呢?

另外,当我在一个节点中部署一个pod并ssh进入该节点,并安装consul时,consul的代理找不到consul服务器(与节点相反,它可以找到它)

编辑:

底线是我找不到添加配置的位置。如果我在 POD 上执行:

consul members

它工作正常,我得到:

Node                          Address            Status  Type    Build   Protocol  DC         Segment
consul-consul-server-0        10.0.103.23:8301   alive   server  1.10.0  2         full  <all>
consul-consul-server-1        10.0.101.151:8301  alive   server  1.10.0  2         full  <all>
consul-consul-server-2        10.0.102.112:8301  alive   server  1.10.0  2         full  <all>
ip-10-0-101-129.ec2.internal  10.0.101.70:8301   alive   client  1.10.0  2         full  <default>
ip-10-0-102-175.ec2.internal  10.0.102.244:8301  alive   client  1.10.0  2         full  <default>
ip-10-0-103-240.ec2.internal  10.0.103.245:8301  alive   client  1.10.0  2         full  <default>
ip-10-0-3-223.ec2.internal    10.0.3.249:8301    alive   client  1.10.0  2         full  <default>

但如果我执行:

# consul agent -datacenter=voip-full -config-dir=/etc/consul.d/ -log-file=log-file -advertise=$(wget -q -O - http://169.254.169.254/latest/meta-data/local-ipv4)

我收到以下错误:

==> Starting Consul agent...
           Version: '1.10.1'
           Node ID: 'f10070e7-9910-06c7-0e12-6edb6cc4c9b9'
         Node name: 'ip-10-0-3-223.ec2.internal'
        Datacenter: 'voip-full' (Segment: '')
            Server: false (Bootstrap: false)
       Client Addr: [127.0.0.1] (HTTP: 8500, HTTPS: -1, gRPC: -1, DNS: 8600)
      Cluster Addr: 10.0.3.223 (LAN: 8301, WAN: 8302)
           Encrypt: Gossip: false, TLS-Outgoing: false, TLS-Incoming: false, Auto-Encrypt-TLS: false

==> Log data will now stream in as it occurs:

2021-08-16T18:23:06.936Z [WARN]  agent: skipping file /etc/consul.d/consul.env, extension must be .hcl or .json, or config format must be set
2021-08-16T18:23:06.936Z [WARN]  agent: Node name "ip-10-0-3-223.ec2.internal" will not be discoverable via DNS due to invalid characters. Valid characters include all alpha-numerics and dashes.
2021-08-16T18:23:06.946Z [WARN]  agent.auto_config: skipping file /etc/consul.d/consul.env, extension must be .hcl or .json, or config format must be set
2021-08-16T18:23:06.947Z [WARN]  agent.auto_config: Node name "ip-10-0-3-223.ec2.internal" will not be discoverable via DNS due to invalid characters. Valid characters include all alpha-numerics and dashes.
2021-08-16T18:23:06.948Z [INFO]  agent.client.serf.lan: serf: EventMemberJoin: ip-10-0-3-223.ec2.internal 10.0.3.223
2021-08-16T18:23:06.948Z [INFO]  agent.router: Initializing LAN area manager
2021-08-16T18:23:06.950Z [INFO]  agent: Started DNS server: address=127.0.0.1:8600 network=udp
2021-08-16T18:23:06.950Z [WARN]  agent.client.serf.lan: serf: Failed to re-join any previously known node
2021-08-16T18:23:06.950Z [INFO]  agent: Started DNS server: address=127.0.0.1:8600 network=tcp
2021-08-16T18:23:06.951Z [INFO]  agent: Starting server: address=127.0.0.1:8500 network=tcp protocol=http
2021-08-16T18:23:06.951Z [WARN]  agent: DEPRECATED Backwards compatibility with pre-1.9 metrics enabled. These metrics will be removed in a future version of Consul. Set `telemetry { disable_compat_1.9 = true }` to disable them.
2021-08-16T18:23:06.953Z [INFO]  agent: started state syncer
2021-08-16T18:23:06.953Z [INFO]  agent: Consul agent running!
2021-08-16T18:23:06.953Z [WARN]  agent.router.manager: No servers available
2021-08-16T18:23:06.954Z [ERROR] agent.anti_entropy: failed to sync remote state: error="No known Consul servers"
2021-08-16T18:23:34.169Z [WARN]  agent.router.manager: No servers available
2021-08-16T18:23:34.169Z [ERROR] agent.anti_entropy: failed to sync remote state: error="No known Consul servers"

那么在哪里添加配置呢?

我也尝试在 k8s 中添加一个指向 pod 的服务,但该服务没有出现在 consul 的 UI 上...

你们有什么推荐的?

谢谢

【问题讨论】:

  • 当你使用带有自己的 etcd 和“服务注册表”的 Kubernetes 时,你需要 consul 吗?
  • 不,我打算通过 k/v 使用 consul 进行服务发现和配置管理

标签: kubernetes consul


【解决方案1】:

Consul 知道这些服务的位置,因为每个服务 向其本地领事客户注册。运营商可以注册 手动服务,配置管理工具可以注册 部署时的服务,或容器编排平台 可以通过集成自动注册服务。

如果您打算使用手动选项,则必须将服务注册到领事中。

类似

echo '{
  "service": {
    "name": "web",
    "tags": [
      "rails"
    ],
    "port": 80
  }
}' > ./consul.d/web.json

您可以在以下位置找到很好的示例:https://thenewstack.io/implementing-service-discovery-of-microservices-with-consul/

这也是一个非常好的文档,用于详细配置健康检查和服务发现:https://cloud.spring.io/spring-cloud-consul/multi/multi_spring-cloud-consul-discovery.html

官方文档:https://learn.hashicorp.com/tutorials/consul/get-started-service-discovery

【讨论】:

  • 谢谢。我已经完成了注册服务教程,很好。我还不明白的是 NODE 代理如何知道我在其中部署的任何服务?如果我部署一个 pod,代理似乎不知道它,所以我想我缺少一些配置来让代理知道它?
  • 人们使用github.com/gliderlabs/registrator也可以自动注册服务,如果你不想使用它也可以使用consul的API来注册服务。
【解决方案2】:

顺便说一句,我终于能够找出问题所在。

consul-dns 默认不部署,我必须手动部署,然后将所有来自 coredns 的.consul 请求转发到 consul-dns。

现在一切正常。谢谢!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-04-04
    • 1970-01-01
    • 2019-02-08
    • 1970-01-01
    • 2020-03-17
    • 2019-04-08
    • 2020-04-10
    相关资源
    最近更新 更多