2017-05-26 66 views
0

我试图内访问一个kubernetes吊舱(minikube-VM内)到外部动物园管理员/卡夫卡(外kubernetes域),基本上没有按没有工作。Kubernetes:从荚外部系统的访问不工作

首先,我有一个docker-image,它运行一个Spring-Boot应用程序,它试图在启动时连接端口2181/9092上的Kafka-Instance。由于我使用端点创建了一个服务,该服务指向应该修复路由的外部主机/ IP,但不幸的是它没有。

这里是服务/端点

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 
 
# 
 
[[email protected] work]# kubectl get services 
 
NAME      CLUSTER-IP EXTERNAL-IP PORT(S)    AGE 
 
ext-kafka     None   <none>  2181/TCP,9092/TCP 2d 
 

 
... 
 

 
[[email protected] 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 -l 192.168.99.1 2181 --keep-open NCAT运行试图从minikube-VM连接与 telnet 192.168.99.1 2181 我得到'没有rotu主机'...

那么如何获得sovle的问题? 如何添加一个服务,它解决了iptables-问题? (我用的kubernetes从创建日期打造: “2017-05-10T15:48:59Z”)

BR

+0

你可以ping'192.168.99.1'并且minikube vm上的'ip a'的输出是什么?你也确定**外部Zookeeper/Kafka **绑定与ip'192.168.99.1'接口吗? – surajd

回答

0

当您使用Minikube,我认为这个问题是因为动物园管理员/卡夫卡IP地址(192.168.99.1)。你可以看到,Minikube被做minikube ssh工作网络192.168.99.0/24并执行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 

因此,如果动物园管理员/卡夫卡被认为是Minikube网络之外,有可能是有冲突IP。我建议你为这个外部服务使用不同的IP(例如:192.168.200.xx)。

+0

哈维尔!你的建议帮助我了!非常感谢。我使用了另一个网络接口,通信正常。 – user2170300