kubernetes - K8s 服务无法ping通
问题描述
我在 minikube 集群中有一个 k8s 服务/部署(名称空间amq
中的default
名称:
D20181472:argo-k8s gms$ kubectl get svc --all-namespaces
NAMESPACE NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
argo argo-ui ClusterIP 10.97.242.57 <none> 80/TCP 5h19m
default amq LoadBalancer 10.102.205.126 <pending> 61616:32514/TCP 4m4s
default kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 5h23m
kube-system kube-dns ClusterIP 10.96.0.10 <none> 53/UDP,53/TCP 5h23m
我启动了 infoblox/dnstools,并尝试了nslookup
,dig
并ping
得到amq.default
以下结果:
dnstools# nslookup amq.default
Server: 10.96.0.10
Address: 10.96.0.10#53
Name: amq.default.svc.cluster.local
Address: 10.102.205.126
dnstools# ping amq.default
PING amq.default (10.102.205.126): 56 data bytes
^C
--- amq.default ping statistics ---
28 packets transmitted, 0 packets received, 100% packet loss
dnstools# dig amq.default
; <<>> DiG 9.11.3 <<>> amq.default
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 15104
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 0
;; QUESTION SECTION:
;amq.default. IN A
;; Query time: 32 msec
;; SERVER: 10.96.0.10#53(10.96.0.10)
;; WHEN: Sat Jan 26 01:58:13 UTC 2019
;; MSG SIZE rcvd: 29
dnstools# ping amq.default
PING amq.default (10.102.205.126): 56 data bytes
^C
--- amq.default ping statistics ---
897 packets transmitted, 0 packets received, 100% packet loss
(注意:直接 ping ip 地址会得到相同的结果)
诚然,我对 DNS 的深层运作不是很了解,所以我不确定为什么我可以查找和挖掘主机名,但不能 ping 通它。
解决方案
诚然,我对 DNS 的深层运作不是很了解,所以我不确定为什么我可以查找和挖掘主机名,但不能 ping 通它。
因为Service
IP 地址是集群想象的虚构,由 iptables 或 ipvs 引起,实际上并不存在。您可以在任何正在运行(或)的iptables -t nat -L -n
节点上看到它们,如有用的Debug[-ing] 服务页面所述kube-proxy
ipvsadm -ln
由于它们不是绑定到实际 NIC 的真实 IP,因此它们不会响应Service
资源中注册的端口号以外的任何流量。针对服务测试连接性的正确方法是使用curl
或netcat
使用您期望应用程序流量通过的端口号。
推荐阅读
- c# - 为什么我的 Access DB 拒绝插入日期时间?
- multithreading - 无法理解 GDB 回溯输出
- ruby-on-rails - rails 5 - 根据页面呈现不同的链接
- java - 如何创建一个每次点击都会给你建议的意图
- sql - 使用不同表中的条件在同一个表中加入 SQL?
- azure - 如何使用 Azure 逻辑应用阅读、更新和发送新电子邮件
- android - com.facebook.react.bridge.ObjectAlreadyConsumedException:地图已使用
- node.js - 在 dockerised Mern 应用程序上启用 https?数字海洋
- r - 循环遍历数据框并导出数据
- sql - 选择仅订购特定会议而不订购其他会议的客户