首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >两个域都监听端口80的K8s入口

两个域都监听端口80的K8s入口
EN

Stack Overflow用户
提问于 2019-03-18 23:12:27
回答 1查看 1.8K关注 0票数 0

我正在尝试在一个部署中复制一个带有两个坞映像的基于名称的虚拟主机。不幸的是,由于端口冲突,我只能运行1:

代码语言:javascript
复制
2019/03/19 20:37:52 [ERR] Error starting server: listen tcp :5678: bind: address already in use

是否真的不可能让两个映像作为同一部署的一部分在同一个端口上侦听?还是我在其他地方出了问题?

这里改编的最小示例

代码语言:javascript
复制
# set up ingress
kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/master/deploy/mandatory.yaml

# set up load balancer
kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/master/deploy/provider/cloud-generic.yaml

# spin up two containers in one deployment, same container port
kubectl apply -f test.yaml

test.yaml

代码语言:javascript
复制
apiVersion: v1
kind: Service
metadata:
  name: echo1
spec:
  ports:
    - port: 80
      targetPort: 5678
  selector:
    app: echo1
---
apiVersion: v1
kind: Service
metadata:
  name: echo2
spec:
  ports:
    - port: 80
      targetPort: 5678
  selector:
    app: echo2
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: echo12
spec:
  selector:
    matchLabels:
      app: echo12
  replicas: 1
  template:
    metadata:
      labels:
        app: echo12
    spec:
      containers:
        - name: echo1
          image: hashicorp/http-echo
          args:
            - "-text=echo1"
          ports:
            - containerPort: 5678
        - name: echo2
          image: hashicorp/http-echo
          args:
            - "-text=echo2"
          ports:
            - containerPort: 5678
---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: echo-ingress
spec:
  rules:
    - host: echo1.example.com
      http:
        paths:
          - backend:
              serviceName: echo1
              servicePort: 80
    - host: echo2.example.com
      http:
        paths:
          - backend:
              serviceName: echo2
              servicePort: 80

更新:如果我添加了一个单独的部署,它就能工作。这是通过设计还是有任何方法,我可以做到这一点,在一个部署(原因:我希望能够重置所有部署域一次)?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-03-21 15:57:56

Problem 1:在一个部署中创建两个不同的服务后端。这不是豆荚设计的目的。如果您想公开多个服务,您应该有一个荚(至少)来支持每个服务。通过允许定义复制和生动权选项,部署围绕着吊舱。在您的情况下,您应该有一个部署(它为相应的服务创建一个或多个豆荚来响应一个回显请求)。

Problem 2:您没有正确地将服务链接到后端。显然,该服务正在尝试选择标签app=echoapp=echo2。在您的部署中,您的app=echo12。因此,该服务将无法找到任何活动端点。

要解决上述问题,请尝试如下:

代码语言:javascript
复制
apiVersion: v1
kind: Service
metadata:
  name: echo1
spec:
  ports:
    - port: 80
      targetPort: 5678
  selector:
    app: echo1
---
apiVersion: v1
kind: Service
metadata:
  name: echo2
spec:
  ports:
    - port: 80
      targetPort: 5678
  selector:
    app: echo2
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: echo1
spec:
  selector:
    matchLabels:
      app: echo1
  replicas: 1
  template:
    metadata:
      labels:
        app: echo1
    spec:
      containers:
        - name: echo1
          image: hashicorp/http-echo
          args:
            - "-text=echo1"
          ports:
            - containerPort: 5678
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: echo2
spec:
  selector:
    matchLabels:
      app: echo2
  replicas: 1
  template:
    metadata:
      labels:
        app: echo2
    spec:
      containers:
        - name: echo2
          image: hashicorp/http-echo
          args:
            - "-text=echo2"
          ports:
            - containerPort: 5678
---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: echo-ingress
spec:
  rules:
    - host: echo1.example.com
      http:
        paths:
          - backend:
              serviceName: echo1
              servicePort: 80
    - host: echo2.example.com
      http:
        paths:
          - backend:
              serviceName: echo2
              servicePort: 80

我已经在我自己的集群中测试了上面的内容,并验证了它是否正常工作(当然是使用不同的入口urls )。希望这能有所帮助!

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55231411

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档