通过服务选择同一Pod中的容器

时间:2018-03-28 16:56:15

标签: kubernetes label containers kubectl

我在Pod中有两个容器,标签为app = read-write。 container-1正在读取7110端口,而container-2正在侦听7111.现在我需要通过Services NodePorts连接这些容器。我创建了两个单独的服务来在每个端口(7110和7111)上分配NodePorts。

---
apiVersion: v1
kind: Service
metadata:
  labels:
    app: read
    tier: service
  name: read
spec:
  ports:
  - port: 7110
    nodePort: 32000
    protocol: TCP
  type: NodePort
  selector:
    app: read
---
apiVersion: v1
kind: Service
metadata:
  labels:
    app: write
    tier: service
  name: write
spec:
  ports:
  - port: 7111
    nodePort: 32001
    protocol: TCP
  type: NodePort
  selector:
    app: write

但是服务通过匹配标签与Pod连接。因此,目前这两项服务不会与任何广告连接相关联,因为广告标注为read-write,服务正在查找标签为readwrite的任何广告连播。在kubernetes中有什么方法可以在Pod中标记容器吗?

我唯一的解决方案是为每个Pod创建单个容器,并为每个容器分配读写标签。但我真的想把这两个容器放在单个容器里面。

1 个答案:

答案 0 :(得分:0)

解决方案相当简单,我在两个服务中添加了两个标签(使用不同的密钥),而不是app:readapp:write,我添加了{{1}我和我的服务中的read: read-service。 在Pod中,我在标签和选择器下添加了这两个键;

服务readwrite.yml

write: write-service

deployment.yml

---
apiVersion: v1
kind: Service
metadata:
  labels:
    read: read-service
    tier: service
  name: read-service
spec:
  ports:
  - port: 7110
    nodePort: 32000
    protocol: TCP
  type: NodePort
  selector:
    read: read-service
---
apiVersion: v1
kind: Service
metadata:
  labels:
    write: write-service
    tier: service
  name: write-service
spec:
  ports:
  - port: 7111
    nodePort: 32001
    protocol: TCP
  type: NodePort
  selector:
    write: write-service

现在,由于两个容器都位于一个Pod下并且有两个标签,因此read-service将查找标签为kind: Deployment apiVersion: extensions/v1beta1 metadata: creationTimestamp: null labels: read: read-service write: write-service tier: service name: if11-read-write spec: replicas: 1 selector: matchLabels: read: read-service write: write-service template: metadata: labels: read: read-service write: write-service tier: service spec: containers: - name: read-container-name ... - name: write-container-name ... 的Pod并分配端口7110和NodePort 32000.而写入服务将看起来 - 标记为read: read-service的Pod,并指定端口7111和NodePort 32001。