Конфликт нескольких сервисов Kubernetes

Я новичок в Kubernetes. Я создал кластер Kubernetes на Amazon EKS. Я пытаюсь настроить несколько служб Kubernetes для запуска нескольких приложений ASP.NET в одном кластере. Но столкнулся со странной проблемой.

Все работает нормально, когда есть только 1 сервис. Но всякий раз, когда я создаю вторую службу для второго приложения, это создает конфликт. Конфликт иногда возникает из-за того, что приложение службы 2 загружает URL-адрес службы 1, а иногда оно загружает приложение службы 1, и то же самое происходит с URL-адресом службы 2 при простой перезагрузке страницы.

Я пробовал как Amazon Classic ELB (с типом службы LoadBalancer), так и контроллер Nginx Ingress (с типом службы ClusterIp). Эта ошибка характерна для обоих подходов.

И службы, и развертывания работают на порту 80, я даже пробовал разные порты для служб и развертываний, чтобы избежать конфликта портов, но с той же проблемой.

Я проверил статус развертывания и обслуживания, и в журнале pod все выглядит нормально. Никаких ошибок или предупреждений

Пожалуйста, расскажите, как я могу исправить эту ошибку. Вот yaml-файл обеих служб для входа nginx

# Service 1 for deployment 1 (container port: 1120)
apiVersion: v1
kind: Service
metadata:
  creationTimestamp: 2018-12-05T14:54:21Z
  labels:
    run: load-balancer-example
  name: app1-svc
  namespace: default
  resourceVersion: "463919"
  selfLink: /api/v1/namespaces/default/services/app1-svc
  uid: a*****-****-****-****-**********c
spec:
  clusterIP: 10.100.102.224
  ports:
  - port: 1120
    protocol: TCP
    targetPort: 1120
  selector:
    run: load-balancer-example
  sessionAffinity: None
  type: ClusterIP
status:
  loadBalancer: {}

2-я услуга

# Service 2 for deployment 2 (container port: 80)
apiVersion: v1
kind: Service
metadata:
  creationTimestamp: 2018-12-05T10:13:33Z
  labels:
    run: load-balancer-example
  name: app2-svc
  namespace: default
  resourceVersion: "437188"
  selfLink: /api/v1/namespaces/default/services/app2-svc
  uid: 6******-****-****-****-************0
spec:
  clusterIP: 10.100.65.46
  ports:
  - port: 80
    protocol: TCP
    targetPort: 80
  selector:
    run: load-balancer-example
  sessionAffinity: None
  type: ClusterIP
status:
  loadBalancer: {}

Спасибо

Можете ли вы предоставить сервисные ямлы?

nightfury1204 05.12.2018 18:40

Спасибо за ответ. Вот команда, которую я использовал для создания сервиса. kubectl expose deployment app1-deployment --type=ClusterIP --name=app1-svc

Osama Sheikh 05.12.2018 18:46

Что я хочу знать о селекторе меток, используемом в службах и развертываниях. Вот почему просили ямлов, а не приказов.

nightfury1204 05.12.2018 19:01

Извините, я только что обновил вопрос с помощью yamls. Пожалуйста, дайте мне знать, если вам что-нибудь понадобится.

Osama Sheikh 05.12.2018 19:04
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
4
2 900
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Проблема с селектор в сервисах. У них обоих одинаковый селектор, и поэтому вы столкнулись с этой проблемой. Таким образом, они оба будут указывать на один и тот же набор модулей.

The set of Pods targeted by a Service is (usually) determined by a Label Selector

Поскольку развертывание 1 и развертывание 2 разные (я думаю), вы должны использовать в них разные селекторы. Затем выставьте развертывания. Например:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
  labels:
    app: nginx
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.15.4
        ports:
        - containerPort: 80

-

apiVersion: apps/v1
kind: Deployment
metadata:
  name: hello-deployment
  labels:
    app: hello
spec:
  replicas: 3
  selector:
    matchLabels:
      app: hello
  template:
    metadata:
      labels:
        app: hello
    spec:
      containers:
      - name: hello
        image: nightfury1204/hello_server
        args:
        - serve
        ports:
        - containerPort: 8080

Выше два развертывания nginx-deployment и hello-deployment имеют разные селекторы. Так что выставляйте их на службу, чтобы они не конфликтовали друг с другом.

Когда вы используете kubectl expose deployment app1-deployment --type=ClusterIP --name=app1-svc для раскрытия развертывания, служба будет иметь тот же селектор, что и развертывание.

Большое спасибо за ваш краткий ответ. Это действительно помогло. Действительно очень ценю это. Еще раз спасибо :-) Ура

Osama Sheikh 05.12.2018 20:04

Другие вопросы по теме