почему я не могу подключиться к redis с помощью python из модуля?

#kubernetes #redis

#kubernetes #redis

Вопрос:

Я запустил модуль redis и создал сервис типа типа NodePort. Я вошел в модуль flask и использовал nslookup, чтобы найти redis.default, показанный ниже.

 / # nslookup redis.default
Server:  10.96.0.10
Address: 10.96.0.10#53
Name: redis.default.svc.cluster.local
Address: 10.98.129.45
/ # python3
Python 3.8.7 (default, Dec 26 2020, 08:45:55) 
[GCC 10.2.1 20201203] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import redis
>>> redis_db = redis.StrictRedis(host="redis.default", port=6379, db=0)
>>> redis_db.ping()
 

результаты позже:

 Traceback (most recent call last):
File "/usr/lib/python3.8/site-packages/redis/connection.py", line 559, in connect
sock = self._connect()
File "/usr/lib/python3.8/site-packages/redis/connection.py", line 615, in _connect
raise err
File "/usr/lib/python3.8/site-packages/redis/connection.py", line 603, in _connect
sock.connect(socket_address)
TimeoutError: [Errno 110] Operation timed out
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python3.8/site-packages/redis/client.py", line 1378, in ping
return self.execute_command('PING')
File "/usr/lib/python3.8/site-packages/redis/client.py", line 898, in execute_command
conn = self.connection or pool.get_connection(command_name, **options)
File "/usr/lib/python3.8/site-packages/redis/connection.py", line 1192, in get_connection
connection.connect()
File "/usr/lib/python3.8/site-packages/redis/connection.py", line 563, in connect
raise ConnectionError(self._error_message(e))
redis.exceptions.ConnectionError: Error 110 connecting to redis.default:6379. Operation timed out.
 

но когда я пытаюсь выполнить пинг с терминала python внутри модуля flask, я не получаю никакого результата.
однако из-за пределов модуля я могу ввести запущенный redis с помощью redis-cli

 # kubectl get services
NAME  TYPE CLUSTER-IP EXTERNAL-IP  PORT(S) AGE
flask NodePort 10.107.57.184  <none> 5000:32071/TCP  37m
kubernetes  ClusterIP  10.96.0.1  <none> 443/TCP 100m
redis NodePort 10.98.129.45 <none> 6379:30667/TCP  8m14s
root@rockpix:/home/skumar/kfd-flask# redis-cli -h 192.168.5.165 -p 30667
192.168.5.165:30667> ping
PONG
192.168.5.165:30667> 
 

где 192.168.5.165 — это модуль, на котором работает модуль.

Я также проверил внутри модуля redis :

 # kubectl exec -it redis-85df5dd845-28xvk -- /bin/sh
/data # netstat
Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address  Foreign Address  State 
Active UNIX domain sockets (w/o servers)
Proto RefCnt Flags  Type  State  I-Node Path
/data # netstat -ltnp | grep redis
/data # netstat -ltnp | grep 6379
tcp 0 0 0.0.0.0:6379 0.0.0.0:*  LISTEN -
tcp 0 0 :::6379  :::* LISTEN -
the port number is correct.
 

Комментарии:

1. это другой вопрос, задающий разницу между IP-адресом модуля и IP-адресом кластера?

2. selector: Вероятно, это сделает подделка Service , но поскольку вы практически не предоставили информации о своих объектах kubernetes, это всего лишь предположение

3. Вы можете показать вывод kubectl get ep . Кстати, это 192.168.5.165 IP-адрес узла?

4. Да, узел запущен

5.вот результат kubectl get ep: NAME ENDPOINTS AGE flask 13h kubernetes 192.168.5.164:6443 14h redis 192.168.42.130:6379 11h