вход указывает на неправильный порт на сервисе - PullRequest
0 голосов
/ 05 октября 2018

У меня есть сервис Kubernetes, который предоставляет два порта следующим образом

Name:              m-svc
Namespace:         m-ns
Labels:            
Annotations:       <none>
Selector:          app=my-application
Type:              ClusterIP
IP:                10.233.43.40
Port:              first  8080/TCP
TargetPort:        8080/TCP
Endpoints:         10.233.115.178:8080,10.233.122.166:8080
Port:              second  8888/TCP
TargetPort:        8888/TCP
Endpoints:         10.233.115.178:8888,10.233.122.166:8888
Session Affinity:  None
Events:            <none>

И вот определение входа:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  annotations:
    kubernetes.io/ingress.class: f5
    virtual-server.f5.com/http-port: "80"
    virtual-server.f5.com/ip: controller-default
    virtual-server.f5.com/round-robin: round-robin
  creationTimestamp: 2018-10-05T18:54:45Z
  generation: 2
  name: m-ingress
  namespace: m-ns
  resourceVersion: "39557812"
  selfLink: /apis/extensions/v1beta1/namespaces/m-ns
  uid: 20241db9-c8d0-11e8-9fac-0050568d4d4a
spec:

  rules:
  - host: www.myhost.com
    http:
      paths:
      - backend:
          serviceName: m-svc
          servicePort: 8080
        path: /first/path
      - backend:
          serviceName: m-svc
          servicePort: 8080
        path: /second/path
status:
  loadBalancer:
    ingress:
    - ip: 172.31.74.89

Но когда я перехожу на www.myhost.com/first/path, я в конечном итогев службе, которая прослушивает порт 8888 из m-svc.Что может происходить?

Другая информация состоит в том, что я разделяю службу между двумя входами, которые указывают на разные порты в одной и той же службе, это проблема?Существует другой входной порт порт 8888 для этой службы, который работает нормально

Также я использую контроллер F5

После длительного изучения этого вопроса, похоже, что основная причина вF5s выглядит так, потому что имя бэкэнда (службы Kubernetes) одинаково, оно создает только одну запись в пуле и направляет запросы к этому бэкэнду и одному порту, который регистрируется в политике F5.можно ли это исправить?Обходной путь - создать уникальный сервис для каждого порта, но я не хочу вносить это изменение, возможно ли это на уровне F5?

Ответы [ 2 ]

0 голосов
/ 06 октября 2018

Ваш Service представляется тем, что называется безголовым сервисом: https://kubernetes.io/docs/concepts/services-networking/service/#headless-services. Это объясняет, почему Endpoints был создан автоматически.

Что-то не так, потому что ваш HTTP-запрос не может прибыть на ваши модули без заполненного .spec.selector.

Я предлагаю удалить созданный вами Service и удалить Endpoints с тем же именем, а затем воссоздайте Service с type=ClusterIP и spec.selector, правильно заполненными.

0 голосов
/ 06 октября 2018

Из того, что я вижу, у вас нет поля Selector в вашем сервисе.Без этого он не будет пересылать ни одному бэкенду или модулю.С чего ты взял, что он собирается в порт 8888?Странно то, что у вас есть Endpoints в вашем сервисе.Вы создали их вручную?

Служба должна выглядеть примерно так:

Name:              m-svc
Namespace:         m-ns
Labels:            
Annotations:       <none>
Selector:          app=my-application
Type:              ClusterIP
IP:                10.233.43.40
Port:              first  8080/TCP
TargetPort:        8080/TCP
Endpoints:         10.233.115.178:8080,10.233.122.166:8080
Port:              second  8888/TCP
TargetPort:        8888/TCP
Endpoints:         10.233.115.178:8888,10.233.122.166:8888
Session Affinity:  None
Events:            <none>

Тогда в вашем определении развертывания:

selector:
  matchLabels:
    app: my-application

Или в модуле:

apiVersion: v1
kind: Pod
metadata:
  annotations: { ... }
  labels:                                
    app: my-application

Вы также сможете описать свой Endpoints:

$ kubectl describe endpoints m-svc
Name:         m-svc
Namespace:    default
Labels:       app=my-application
Annotations:  <none>
Subsets:
  Addresses:          x.x.x.x
  NotReadyAddresses:  <none>
  Ports:
    Name    Port  Protocol
    ----    ----  --------
    first   8080  TCP
    second  8081  TCP

Events:  <none>
...