Я новичок в 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: {}
Спасибо
Спасибо за ответ. Вот команда, которую я использовал для создания сервиса. kubectl expose deployment app1-deployment --type=ClusterIP --name=app1-svc
Что я хочу знать о селекторе меток, используемом в службах и развертываниях. Вот почему просили ямлов, а не приказов.
Извините, я только что обновил вопрос с помощью yamls. Пожалуйста, дайте мне знать, если вам что-нибудь понадобится.





Проблема с селектор в сервисах. У них обоих одинаковый селектор, и поэтому вы столкнулись с этой проблемой. Таким образом, они оба будут указывать на один и тот же набор модулей.
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 для раскрытия развертывания, служба будет иметь тот же селектор, что и развертывание.
Большое спасибо за ваш краткий ответ. Это действительно помогло. Действительно очень ценю это. Еще раз спасибо :-) Ура
Можете ли вы предоставить сервисные ямлы?