作为这个问题的另一个问题,我想知道如果外部服务无法通过互联网访问,但只能从我的 kubernetes 所在的主机网络访问,我如何从 kubernetes pod(流利的)内部访问我的外部服务(elasticsearch)托管。
这是我应用的外部服务 kubernetes 对象:
kind: Service
apiVersion: v1
metadata:
name: ext-elastic
namespace: kube-system
spec:
type: ExternalName
externalName: 192.168.57.105
ports:
- port: 9200
所以现在我有这个服务:
ubuntu@controller:~$ kubectl get svc -n kube-system
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
ext-elastic ExternalName <none> 192.168.57.105 9200/TCP 2s
kube-dns ClusterIP 10.96.0.10 <none> 53/UDP,53/TCP 1d
弹性搜索在那里:
ubuntu@controller:~$ curl 192.168.57.105:9200
{
"name" : "6_6nPVn",
"cluster_name" : "elasticsearch",
"cluster_uuid" : "ZmxYHz5KRV26QV85jUhkiA",
"version" : {
"number" : "6.2.3",
"build_hash" : "c59ff00",
"build_date" : "2018-03-13T10:06:29.741383Z",
"build_snapshot" : false,
"lucene_version" : "7.2.1",
"minimum_wire_compatibility_version" : "5.6.0",
"minimum_index_compatibility_version" : "5.0.0"
},
"tagline" : "You Know, for Search"
}
但是从我的 fluentd-pod 中,我既无法在 nslookup 中解析服务名称,也无法 ping 简单 IP。这些命令都不起作用:
ubuntu@controller:~$ kubectl exec fluentd-f5dks -n kube-system ping 192.168.57.105
ubuntu@controller:~$ kubectl exec fluentd-f5dks -n kube-system nslookup ext-elastic
这是关于我的网络拓扑的描述:
192.168.57.105
我的 elasticsearch 所在的 VM 和我的 kubernetes 控制器所在的 VM都有192.168.57.102
. 如上所示,连接工作良好。
控制器节点也有 IP 192.168.56.102
。这是他与我的 kubernetes 集群的其他工作节点(也是虚拟机)在一起的网络。
我的 fluentd-pod 将自己视为172.17.0.2
. 它可以很容易地到达,192.168.56.102
但不是,192.168.57.102
虽然它是主机,也是同一个节点。
编辑
fluentd-pod 的路由表如下所示:
ubuntu@controller:~$ kubectl exec -ti fluentd-5lqns -n kube-system -- route
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
default 10.244.0.1 0.0.0.0 UG 0 0 0 eth0
10.244.0.0 * 255.255.255.0 U 0 0 0 eth0
fluentd /etc/resolc.conf
-pod 的样子如下:
ubuntu@controller:~$ kubectl exec -ti fluentd-5lqns -n kube-system -- cat /etc/resolv.conf nameserver 10.96.0.10 search kube-system.svc.cluster.local svc.cluster.local cluster.local options点数:5
托管 kubernetes 控制器并可以访问所需的 elasticsearch 服务的 VM 的路由表如下所示:
ubuntu@controller:~$ route
Kernel-IP-Routentabelle
Ziel Router Genmask Flags Metric Ref Use Iface
default 10.0.2.2 0.0.0.0 UG 0 0 0 enp0s3
10.0.2.0 * 255.255.255.0 U 0 0 0 enp0s3
10.244.0.0 * 255.255.255.0 U 0 0 0 kube-bridge
10.244.1.0 192.168.56.103 255.255.255.0 UG 0 0 0 enp0s8
10.244.2.0 192.168.56.104 255.255.255.0 UG 0 0 0 enp0s8
172.17.0.0 * 255.255.0.0 U 0 0 0 docker0
192.168.56.0 * 255.255.255.0 U 0 0 0 enp0s8
192.168.57.0 * 255.255.255.0 U 0 0 0 enp0s9