记一次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地址错误的问题。
🏷️
标签
➡️