Kubernetes:无法从 Pods 访问外部系统
Kubernetes: Access of external Systems from Pods don't work
我正在尝试访问 within 一个 kubernetes pod(在 minikube-VM 内部)到一个 external Zookeeper/Kafka(外部kubernetes-domain) ,这基本上不起作用。
首先,我有一个 docker-image,它 运行 是一个 Spring-Boot 应用程序,它尝试在启动时分别连接端口 2181/9092 上的 Kafka 实例.由于我创建了一个带有端点的服务,它指向应该修复路由的外部 Host/IP,但不幸的是它没有。
这里是service/endpoint
的定义
apiVersion: v1
kind: Service
metadata:
name: ext-kafka
namespace: default
spec:
clusterIP: None
ports:
- port: 2181
name: zk
protocol: TCP
targetPort: 2181
- port: 9092
name: kafka
protocol: TCP
targetPort: 9092
---
apiVersion: v1
kind: Endpoints
metadata:
name: ext-kafka
namespace: default
subsets:
- addresses:
# 192.168.99.1 is the external IP
- ip: 192.168.99.1
ports:
- port: 2181
name: zk
- port: 9092
name: kafka
#
# HERE ARE THE DEPLOYMENTS/DEFINITIONS THAT THE SERVICES ARE INSTALLED
#
[root@centos1 work]# kubectl get services
NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE
ext-kafka None <none> 2181/TCP,9092/TCP 2d
...
[root@centos1 work]# kubectl get endpoints
NAME ENDPOINTS AGE
ext-kafka 192.168.99.1:2181,192.168.99.1:9092 2d
我检查了 minikube VM 上的 iptables,因为它指出包被拒绝。所以清理并不能解决问题,因为它会在幕后自动重新创建。
$ iptables -L
....
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
KUBE-FIREWALL all -- anywhere anywhere
KUBE-SERVICES all -- anywhere anywhere /* kubernetes service portals */
...
Chain KUBE-FIREWALL (2 references)
target prot opt source destination
DROP all -- anywhere anywhere /* kubernetes firewall for dropping marked packets */ mark match 0x8000/0x8000
Chain KUBE-SERVICES (1 references)
target prot opt source destination
....
REJECT tcp -- anywhere anywhere /* default/server-command: has no endpoints */ ADDRTYPE match dst-type LOCAL tcp dpt:30021 reject-with icmp-port-unreachable
REJECT tcp -- anywhere 10.0.0.240 /* default/server-command: has no endpoints */ tcp dpt:webcache
....
另一种缓解星座的方法:
我 运行 ncat 与 ncat -l 192.168.99.1 2181 --keep-open
在主机上,zookeeper/Kafka 应该 运行
并尝试从 minikube-VM 连接
telnet 192.168.99.1 2181
我有 'no rotue to host' ...
那么如何解决这个问题呢??
如何添加解决 iptables- 问题的服务?
(我使用了 BuildDate:"2017-05-10T15:48:59Z" 中的 kubernetes 构建)
BR
由于您使用的是 Minikube,我认为问题出在 Zookeeper/Kafka IP 地址 (192.168.99.1)。您可以通过 minikube ssh
和执行 ip addr
看到 Minikube 正在网络 192.168.99.0/24 上工作
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 08:00:27:97:6c:ed brd ff:ff:ff:ff:ff:ff
inet 192.168.99.100/24 brd 192.168.99.255 scope global dynamic eth1
valid_lft 798sec preferred_lft 798sec
inet6 fe80::a00:27ff:fe97:6ced/64 scope link
valid_lft forever preferred_lft forever
因此,如果zookeeper/kafka假设在Minikube网络之外,可能会与IP冲突。我建议您为这个外部服务使用不同的 IP(例如:192.168.200.xx)。
我正在尝试访问 within 一个 kubernetes pod(在 minikube-VM 内部)到一个 external Zookeeper/Kafka(外部kubernetes-domain) ,这基本上不起作用。
首先,我有一个 docker-image,它 运行 是一个 Spring-Boot 应用程序,它尝试在启动时分别连接端口 2181/9092 上的 Kafka 实例.由于我创建了一个带有端点的服务,它指向应该修复路由的外部 Host/IP,但不幸的是它没有。
这里是service/endpoint
的定义apiVersion: v1
kind: Service
metadata:
name: ext-kafka
namespace: default
spec:
clusterIP: None
ports:
- port: 2181
name: zk
protocol: TCP
targetPort: 2181
- port: 9092
name: kafka
protocol: TCP
targetPort: 9092
---
apiVersion: v1
kind: Endpoints
metadata:
name: ext-kafka
namespace: default
subsets:
- addresses:
# 192.168.99.1 is the external IP
- ip: 192.168.99.1
ports:
- port: 2181
name: zk
- port: 9092
name: kafka
#
# HERE ARE THE DEPLOYMENTS/DEFINITIONS THAT THE SERVICES ARE INSTALLED
#
[root@centos1 work]# kubectl get services
NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE
ext-kafka None <none> 2181/TCP,9092/TCP 2d
...
[root@centos1 work]# kubectl get endpoints
NAME ENDPOINTS AGE
ext-kafka 192.168.99.1:2181,192.168.99.1:9092 2d
我检查了 minikube VM 上的 iptables,因为它指出包被拒绝。所以清理并不能解决问题,因为它会在幕后自动重新创建。
$ iptables -L
....
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
KUBE-FIREWALL all -- anywhere anywhere
KUBE-SERVICES all -- anywhere anywhere /* kubernetes service portals */
...
Chain KUBE-FIREWALL (2 references)
target prot opt source destination
DROP all -- anywhere anywhere /* kubernetes firewall for dropping marked packets */ mark match 0x8000/0x8000
Chain KUBE-SERVICES (1 references)
target prot opt source destination
....
REJECT tcp -- anywhere anywhere /* default/server-command: has no endpoints */ ADDRTYPE match dst-type LOCAL tcp dpt:30021 reject-with icmp-port-unreachable
REJECT tcp -- anywhere 10.0.0.240 /* default/server-command: has no endpoints */ tcp dpt:webcache
....
另一种缓解星座的方法:
我 运行 ncat 与 ncat -l 192.168.99.1 2181 --keep-open
在主机上,zookeeper/Kafka 应该 运行
并尝试从 minikube-VM 连接
telnet 192.168.99.1 2181
我有 'no rotue to host' ...
那么如何解决这个问题呢?? 如何添加解决 iptables- 问题的服务? (我使用了 BuildDate:"2017-05-10T15:48:59Z" 中的 kubernetes 构建)
BR
由于您使用的是 Minikube,我认为问题出在 Zookeeper/Kafka IP 地址 (192.168.99.1)。您可以通过 minikube ssh
和执行 ip addr
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 08:00:27:97:6c:ed brd ff:ff:ff:ff:ff:ff
inet 192.168.99.100/24 brd 192.168.99.255 scope global dynamic eth1
valid_lft 798sec preferred_lft 798sec
inet6 fe80::a00:27ff:fe97:6ced/64 scope link
valid_lft forever preferred_lft forever
因此,如果zookeeper/kafka假设在Minikube网络之外,可能会与IP冲突。我建议您为这个外部服务使用不同的 IP(例如:192.168.200.xx)。