Не удается получить доступ к сервису через сервис Kubernetes с указанными конечными точками

Я создал службу Kubernetes, внутренние узлы которой не являются частью кластера, а представляют собой фиксированный набор узлов (с фиксированными IP-адресами), поэтому я также создал конечные точки. > ресурс с таким же названием:

apiVersion: v1
kind: Service
metadata:
  name: hive
spec:
  type: ClusterIP
  ports:
    - name: http
      port: 80
      protocol: TCP
      targetPort: 10002
---
apiVersion: v1
kind: Endpoints
metadata:
  name: hive
subsets:
  - addresses:
      - ip: 10.52.7.28
      - ip: 10.52.7.29
    ports:
      - port: 10002

Описание службы и конечных точек:

$ kubectl describe svc/hive
Name:              hive
Namespace:         default
Labels:            <none>
Annotations:       <none>
Selector:          <none>
Type:              ClusterIP
IP:                10.0.192.103
Port:              http  80/TCP
TargetPort:        10002/TCP
Endpoints:
Session Affinity:  None
Events:            <none>
$ 
$ kubectl describe ep/hive
Name:         hive
Namespace:    default
Labels:       <none>
Annotations:  <none>
Subsets:
  Addresses:          10.52.7.28,10.52.7.29
  NotReadyAddresses:  <none>
  Ports:
    Name     Port   Protocol
    ----     ----   --------
    <unset>  10002  TCP

Events:  <none>

Если я захожу в один из модулей и подключаюсь через telnet напрямую к адресам подмножества конечной точки, я могу подключиться, но если я получаю доступ к нему через службу, я получаю отказ в подключении. Просто для полноты Service и модуль находятся в одном пространстве имен:

# telnet 10.52.7.28 10002
Trying 10.52.7.28...
Connected to 10.52.7.28.
Escape character is '^]'.
^CConnection closed by foreign host.
#
# telnet 10.52.7.29 10002
Trying 10.52.7.29...
Connected to 10.52.7.29.
Escape character is '^]'.
^CConnection closed by foreign host.
#
# telnet hive 80
Trying 10.0.192.103...
telnet: Unable to connect to remote host: Connection refused
#

Есть идеи, почему я могу напрямую подключиться к IP-адресу, но не могу пройти через службу Kubernetes? Я считаю, что это не из-за правил брандмауэра, потому что тогда он также должен был блокировать прямые запросы.

Редактировать: я подозреваю, что это как-то связано с тем, что Endpoints был пустым, когда я запускаю kubectl describe svc/hive, но я вижу на панели инструментов, что конечные точки (на странице службы) показывают эти конечные точки.


person Shubham    schedule 16.01.2020    source источник
comment
Отвечает ли это на ваш вопрос? Kubernetes — сервисы без селектора   -  person Arghya Sadhu    schedule 16.01.2020
comment
@ArghyaSadhu Так и есть. Проблема довольно похожа. Как-то не наткнулся на этот вопрос, пока гуглил. Спасибо!   -  person Shubham    schedule 16.01.2020


Ответы (1)


Имена портов должны совпадать между Service и Endpoint. Либо удалите имя порта в сервисе, либо добавьте его в Endpoint.

apiVersion: v1
kind: Service
metadata:
  name: hive
spec:
  type: ClusterIP
  ports:
    - name: http
      port: 80
      protocol: TCP
      targetPort: 10002
---
apiVersion: v1
kind: Endpoints
metadata:
  name: hive
subsets:
  - addresses:
      - ip: 10.52.7.28
      - ip: 10.52.7.29
    ports:
      - name: http
        port: 10002
person Shashank V    schedule 16.01.2020