记一次kubernetes获取internal Ip错误流程

💡 原文中文,约2000字,阅读约需5分钟。
📝

内容提要

本文讲述了在使用Kubernetes时获取内部IP地址错误的问题。通过分析代码和抓包发现,问题是由于getaddrinfo函数对返回的IP地址进行了重新排序导致的。这是因为getaddrinfo函数支持了RFC3484规则,其中的Rule9会根据最长匹配前缀来选择IP地址。最终解决方法是通过配置kubelet的--node-ip参数来指定正确的IP地址。

🎯

关键要点

  • 本文讨论了Kubernetes中获取内部IP地址错误的问题。

  • 问题表现为通过Kubernetes获取的节点IP地址与预期不符。

  • Kubernetes将节点信息保存在/registry/minions/$node-name中的InternalIp字段。

  • InternalIp的确定过程涉及多个步骤,包括DNS查找和网络接口IP获取。

  • 在本案例中,未手动设置nodeIp,需通过kubelet命令行设置。

  • 通过strace追溯发现,最终调用了getaddrinfo函数,该函数对IP地址进行了重新排序。

  • getaddrinfo函数支持RFC3484规则,特别是Rule9,导致IP地址的优先级排序。

  • RFC3484的Rule9根据最长匹配前缀选择IP地址,可能与DNS轮询策略不兼容。

  • 最终通过配置kubelet的--node-ip参数解决了IP地址错误的问题。

🏷️

标签

➡️

继续阅读