我一直试图在Kubernetes中实现一个服务,其中每个Pod都需要从集群外部访问。
我的服务的拓扑结构很简单:3个成员,其中一个在任何时候充当主从(基于选举);写到主服务器;读到次要文件。顺便说一下,这是MongoDB复制集。
它们在Kubernetes集群中不存在任何问题,但从外部看,我所拥有的唯一一种NodePort服务类型是将传入连接加载到其中之一,但我需要分别访问其中的每个连接,这取决于我想要从客户端执行的操作(写还是读)。
我应该使用什么样的Kubernetes资源来让每个成员都能得到我的服务?
发布于 2018-03-29 12:31:24
为了从外部访问每个荚,您可以为每个荚创建一个单独的服务,并使用NodePort类型。
因为服务使用选择器到达可用后端,所以您只能为主服务器创建一个服务:
apiVersion: v1
kind: Service
metadata:
name: my-master
labels:
run: my-master
spec:
type: NodePort
ports:
- port: #your-external-port
targetPort: #your-port-exposed-in-pod
protocol: TCP
selector:
run: my-master
-------------
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-master
spec:
selector:
matchLabels:
run: my-master
replicas: 1
template:
metadata:
labels:
run: my-master
spec:
containers:
- name: mongomaster
image: yourcoolimage:lates
ports:
- containerPort: #your-port-exposed-in-pod此外,您可以对所有只读副本使用一个服务,该服务将平衡所有这些副本之间的请求。
apiVersion: v1
kind: Service
metadata:
name: my-replicas
labels:
run: my-replicas
spec:
type: LoadBalancer
ports:
- port: #your-external-port
targetPort: #your-port-exposed-in-pod
protocol: TCP
selector:
run: my-replicas
---------
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-replicas
spec:
selector:
matchLabels:
run: my-replicas
replicas: 2
template:
metadata:
labels:
run: my-replicas
spec:
containers:
- name: mongoreplica
image: yourcoolimage:lates
ports:
- containerPort: #your-port-exposed-in-pod我还建议您不要因为安全原因而将Pod暴露在网络之外。最好创建严格的防火墙规则来限制任何意外的连接。
https://stackoverflow.com/questions/49532232
复制相似问题