首页 > 解决方案 > Kubernetes、节点或 pod 上的领事代理?

问题描述

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

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

我找不到任何关于如何通过节点的领事代理在领事上注册 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 上......

大家有什么推荐的?

谢谢

标签: kubernetesconsul

解决方案


Consul 知道这些服务的位置,因为每个服务都向其本地 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


推荐阅读