0

我有一个场景,我需要在同一个 pod 中运行一个应用容器的两个实例。我将它们设置为侦听不同的端口。下面是部署清单的样子。Pod 以预期的容器数量正常启动。我什至可以从其他 pod 连接到 podIP 上的两个端口。

kind: Deployment
metadata:
  labels:
    service: app1-service
  name: app1-dep
  namespace: exp
spec:
  template:
    spec:
      contianers:
        - image: app1:1.20
          name: app1
          ports:
          - containerPort: 9000
            protocol: TCP
        - image: app1:1.20
          name: app1-s1
          ports:
          - containerPort: 9001
            protocol: TCP

我什至可以为容器的每个端口创建两个不同的服务,而且效果也很好。我可以单独访问这两个服务并最终访问 Pod 中的相应容器。

apiVersion: v1
kind: Service
metadata:
  name: app1
  namespace: exp
spec:
  ports:
  - name: http
    port: 80
    protocol: TCP
    targetPort: 9000
  selector:
    service: app1-service
  sessionAffinity: None
  type: ClusterIP

---
apiVersion: v1
kind: Service
metadata:
  name: app1-s1
  namespace: exp
spec:
  ports:
  - name: http
    port: 80
    protocol: TCP
    targetPort: 9001
  selector:
    service: app1-service
  sessionAffinity: None
  type: ClusterIP

我希望容器的两个实例都在一个服务后面,即两个容器之间的循环。我怎样才能做到这一点?在服务领域内可能吗?或者我需要探索类似这样的入口吗?

4

3 回答 3

1

Kubernetes 服务具有三种代理模式:(iptables默认)userspace、、IPVS.

  • Userspace: 是较旧的方式,它以循环方式分发是唯一的方式。
  • Iptables: 是默认设置,随机选择一个 pod 并坚持使用。
  • IPVS: 有多种分配流量的方法,但首先你必须在你的节点上安装它,例如在 centos 节点上使用这个命令: yum install ipvsadm然后让它可用。

就像我说的,Kubernetes 服务默认没有循环。要激活IPVS,您必须向 kube-proxy 添加一个参数

--proxy-mode=ipvs

--ipvs-scheduler=rr (选择循环)

于 2019-07-21T08:04:22.197 回答
0

我要做的是将应用程序分隔在两个不同的部署中,每个部署中有一个容器。我会为两个部署设置相同的标签,并使用一项服务攻击它们。

这样,您甚至不必在不同的端口上运行它们。

稍后,如果您希望其中一个接收更多流量,我将只考虑每个部署的副本数量。

于 2019-07-21T12:47:42.343 回答
0

可以使用单个服务公开多个端口。在 Kubernetes-service manifest 中,spec.ports[]是一个数组。因此,可以在其中指定多个端口。例如,见下图:

apiVersion: v1
kind: Service
metadata:
  name: app1
  namespace: exp
spec:
  ports:
  - name: http
    port: 80
    protocol: TCP
    targetPort: 9000
  - name: http-s1
    port: 81
    protocol: TCP
    targetPort: 9001
  selector:
    service: app1-service
  sessionAffinity: None
  type: ClusterIP

现在,除了端口,主机名相同,默认情况下,在用户空间模式下,通过循环算法kube-proxy选择后端。

于 2019-07-21T07:37:00.723 回答