将相同的映像部署到两个不同的名称空间和相同的端口

时间:2019-07-11 09:52:23

标签: kubernetes

我有一个单节点k8s集群。我有两个名称空间,分别称为n1n2。我想在相同的端口上,但在不同的名称空间中部署相同的映像。

我该怎么做?

命名空间yamls:

apiVersion: v1
kind: Namespace
metadata:
  name: n1

and

apiVersion: v1
kind: Namespace
metadata:
  name: n2

服务Yamls:

apiVersion: v1
kind: Service
metadata:
  name: my-app-n1
  namespace: n1
  labels:
    app: my-app-n1
spec:
  type: LoadBalancer
  ports:
  - name: http
    port: 80
    targetPort: http
    protocol: TCP
  selector:
    app: my-app-n1

and

apiVersion: v1
kind: Service
metadata:
  name: my-app-n2
  namespace: n2
  labels:
    app: my-app-n2
spec:
  type: LoadBalancer
  ports:
  - name: http
    port: 80
    targetPort: http
    protocol: TCP
  selector:
    app: my-app-n2

部署Yaml:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-app-n1
  labels:
    app: my-app-n1
spec:
  replicas: 1
  selector:
    matchLabels:
      app: my-app-n1
  template:
    metadata:
      labels:
        app: my-app-n1
    spec:
      containers:
      - name: waiter
        image: waiter:v1
        ports:
        - containerPort: 80

and

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-app-n2
  labels:
    app: my-app-n2
spec:
  replicas: 1
  selector:
    matchLabels:
      app: my-app-n2
  template:
    metadata:
      labels:
        app: my-app-n2
    spec:
      containers:
      - name: waiter
        image: waiter:v1
        ports:
        - containerPort: 80

waiter:v1与此仓库对应:https://hub.docker.com/r/adamgardnerdt/waiter

由于命名空间应该表示不同的环境,我当然可以这样做吗?例如。非产品与产品因此,可以肯定,我可以将其完全相同地部署到两个不同的“环境”(又称为“命名空间”)中吗?

2 个答案:

答案 0 :(得分:2)

对于Service,您已经指定了命名空间。

对于部署,您还应该指定命名空间,否则它们将进入默认命名空间。

示例:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-app-n1
  namespace: n1
  labels:
    app: my-app-n1
spec:
  replicas: 1
  selector:
    matchLabels:
      app: my-app-n1
  template:
    metadata:
      labels:
        app: my-app-n1
    spec:
      containers:
      - name: waiter
        image: waiter:v1
        ports:
        - containerPort: 80

答案 1 :(得分:1)

  

我想在相同的端口上,但在不同的名称空间中部署相同的映像。

除了deployment对象之外,您已经在使用配置来做到这一点,这些对象应该引用正确的名称空间(如 Ijaz Ahmad Khan 的回答所述),其他服务可以使用分别使用DNS名称my-app-n1my-app-n2的名称空间。

因为waiter是一个Web服务器,所以我假设您想从Internet访问它的两个实例。因此,您应该:

  • 将两种服务的类型都更改为ClusterIP
  • 添加ingress对象,每个名称空间一个,包含一个主机名,例如分别为myapp.comstaging.myapp.com
  • 将负载均衡器放在群集的前面:负载均衡器将使用入口对象来知道哪个主机名与哪个服务匹配(您的云提供商应自动创建一个负载均衡器)。