Kubernetes多种服务冲突

时间:2018-12-05 17:23:50

标签: amazon-web-services asp.net-core kubernetes kubernetes-ingress amazon-eks

我是Kubernetes的新手。我在亚马逊EKS上创建了一个Kubernetes集群。 我正在尝试设置多个kubernetes服务以在一个群集中运行多个ASP.NET应用程序。但是面临一个奇怪的问题。

只有1个服务时,一切运行正常。但是,每当我为第二个应用程序创建第二个服务时,就会产生冲突。冲突是有时某个服务1 url加载了service 2应用程序,而有时它加载了service 1应用程序,并且在简单页面重新加载时与service 2 url发生了相同的事情。

我已经尝试了Amazon Classic ELB(具有LoadBalancer服务类型)和Nginx Ingress控制器(具有ClusterIp服务类型)。在两种方法中此错误都很常见。

服务和部署都在端口80上运行,我什至尝试为服务和部署使用不同的端口,以避免端口冲突但存在相同的问题。

我已经检查了部署和服务状态,并且pod日志一切正常。完全没有错误或警告

请指导我如何解决此错误。 这是nginx入口的两种服务的yaml文件

# 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: {}

第二次服务

# 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: {}

谢谢

1 个答案:

答案 0 :(得分:2)

问题出在服务中的选择器。它们都具有相同的选择器,这就是您面临该问题的原因。因此它们都将指向同一组豆荚。

  

服务所针对的Pod集合(通常)由标签选择器确定

由于deployemnt 1和Deployment 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-deploymenthello-deployment中的选择器不同。因此,让他们接受服务不会彼此冲突。

使用kubectl expose deployment app1-deployment --type=ClusterIP --name=app1-svc公开部署时,该服务将具有与部署相同的选择器。