Почему я не могу получить доступ к сервису ClusterIP через его имя? - PullRequest
1 голос
/ 09 июля 2019

Я настроил простую службу CisterIP для повторного доступа, чтобы доступ к ней выполнялся службой php LoadBalancer внутри Кластера. Журнал php показывает ошибку тайм-аута соединения. Сервис Redis недоступен.

'production'.ERROR: Operation timed out {"exception":"[object] (RedisException(code: 0): 
Operation timed out at /var/www/html/vendor/laravel/framework/src/Illuminate/Redis
/html/vendor/laravel/framework/src/Illuminate/Redis/Connectors/PhpRedisConnector.php(109): 
    Redis->connect('redis-svc', '6379', 0, '', 0, 0)

Мой сервис redis довольно прост, поэтому я не знаю, что пошло не так:

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  labels:
    io.kompose.service: redis
  name: redis
spec:
  replicas: 1
  strategy: {}
  template:
    metadata:
      labels:
        io.kompose.service: redis
    spec:
      containers:
      - image: redis:alpine
        name: redis
        resources: {}
        ports:
        - containerPort: 6379
      restartPolicy: Always
status: {}
---
kind: Service
apiVersion: v1
metadata:
  name: redis-svc
spec:
  selector:
    app: redis
  ports:
  - protocol: TCP
    port: 6379
    targetPort: 6379
  type: ClusterIP

Я проверяю, запущен ли redis-svc, так почему другой сервис не может получить к нему доступ

kubectl get service redis-svc                                                                                                                                  git:k8s*
NAME        TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)    AGE
redis-svc   ClusterIP   10.101.164.225   <none>        6379/TCP   22m

Этот SO kubernetes не может пропинговать другой сервис сказал, что ping не работает с IP-адресом кластера сервиса (действительно), как я могу проверить, можно ли получить доступ к redis-svc или нет?

---- обновление ----

Мой первый вопрос был глупой ошибкой, но я до сих пор не знаю, как мне проверить, можно ли получить доступ к службе (по ее названию). Например, я изменил имя службы, чтобы оно совпадало с именем развертывания, и обнаружил, что php снова не удалось получить доступ к redis.

kubectl get endpoints сейчас не помогло.

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: redis
...
status: {}
---
kind: Service
apiVersion: v1
metadata:
  name: redis
...

Мой php - это еще одна служба, в которой env устанавливает имя службы Redis

spec:
  containers:
  - env:
    - name: REDIS_HOST # the php code access this variable
      value: redis-svc #changed to "redis" when redis service name changed to "redis"

----- обновление 2 ------

Причиной, по которой я могу установить в качестве имени моей службы redis значение "redis", является b / c " kubelet добавляет набор переменных среды для каждой активной службы ", поэтому с именем "redis" будет быть REDIS_PORT=tcp://10.101.210.23:6379, который переписывает мой собственный REDIS_PORT=6379 Но мой PHP просто ожидал, что значение REDIS_PORT будет 6379

1 Ответ

4 голосов
/ 09 июля 2019

Я запустил указанную вами конфигурацию yaml, и она создала развертывание и службу. Однако, когда я запускаю следующие команды:

>>> kubectl get svc
NAME         TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)    AGE
kubernetes   ClusterIP   10.96.0.1       <none>        443/TCP    5d14h
redis-svc    ClusterIP   10.105.31.201   <none>        6379/TCP   109s

>>>> kubectl get endpoints
NAME         ENDPOINTS             AGE
kubernetes   192.168.99.116:8443   5d14h
redis-svc    <none>                78s

Как видите, конечных точек для redis-svc нет, это означает, что у службы нет конечной точки для подключения. Вы используете метки селектора как app: redis в Redis-SVC. Но у модулей нет метки селектора, определенной в сервисе. Добавление метки app: redis в шаблон модуля будет работать. Полная рабочая конфигурация развертывания yaml будет выглядеть так:

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  labels:
    io.kompose.service: redis
  name: redis
spec:
  replicas: 1
  strategy: {}
  template:
    metadata:
      labels:
        io.kompose.service: redis
        app: redis
    spec:
      containers:
      - image: redis:alpine
        name: redis
        resources: {}
        ports:
        - containerPort: 6379
      restartPolicy: Always
status: {}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...