Kubernetes: доступ к внешним системам из подов не работает

Я пытаюсь получить доступ внутри модуля kubernetes (внутри minikube-VM) к внешнему Zookeeper / Kafka (за пределами домена kubernetes), что в основном не работает.

Во-первых, у меня есть docker-image, который запускает приложение Spring-Boot и пытается при запуске подключиться к Kafka-Instance через порт 2181/9092. Поскольку я создал службу с конечной точкой, которая указывает на внешний хост / 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
#
[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

Я проверил iptables на виртуальной машине minikube, так как в нем говорилось, что пакеты отклоняются. Таким образом, очистка не решает проблему, поскольку она автоматически воссоздается за кулисами.

$ 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")

BR


person user2170300    schedule 26.05.2017    source источник
comment
Можете ли вы пинговать 192.168.99.1, а также каков результат ip a на minikube vm? Также вы уверены, что внешний Zookeeper / Kafka привязан к интерфейсу с ip 192.168.99.1?   -  person surajd    schedule 29.05.2017


Ответы (1)


Поскольку вы используете Minikube, я думаю, что проблема связана с IP-адресом Zookeeper / Kafka (192.168.99.1). Вы можете видеть, что Minikube работает в сети 192.168.99.0/24, выполнив 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) для этой внешней службы.

person Javier Salmeron    schedule 29.05.2017
comment
Привет, Хавьер! Ваше предложение мне помогло! Большое спасибо. Я использовал другой сетевой интерфейс, и связь работала. - person user2170300; 01.06.2017