我在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
,服务正在查找标签为read
或write
的任何广告连播。在kubernetes中有什么方法可以在Pod中标记容器吗?
我唯一的解决方案是为每个Pod创建单个容器,并为每个容器分配读写标签。但我真的想把这两个容器放在单个容器里面。
答案 0 :(得分:0)
解决方案相当简单,我在两个服务中添加了两个标签(使用不同的密钥),而不是app:read
和app: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。