kubernetes - 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 上......
大家有什么推荐的?
谢谢
解决方案
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
推荐阅读
- vuejs2 - 在 nativescript-vue 应用程序中集成 nativescript-paytm 插件
- php - 显示 WordPress 帖子中的每张图片
- javascript - 使用 javascript 在 div 中设置图像,使用 backgroundImage
- python - 在 SQLAlchemy 中获取具有列名的列的最大子集
- javascript - 将点击事件添加到 ngx-datatable 单元格主体
- c# - 如何从 web api 参数中删除转义字符
- r - 为多行分配颜色并在ggplot中添加图例
- php - 如何将重复数组键的值更改为递增的数字
- tensorflow - 多层 LSTM 网络的 Tensorflow 复用
- linux - Bash 脚本:max,min,sum - 许多来源作为参数