我一直在尝试在Kubernetes中实现一个服务,其中每个Pod都需要从群集外部访问。
我的服务拓扑很简单:3名成员,其中一名成员随时担任主人(基于选举);写入主要;读到二级。这是MongoDB副本设置的方式。
他们在内部 Kubernetes集群中没有问题,但是从外部我唯一拥有的是NodePort
服务类型,可以将传入连接负载平衡到其中一个,但我需要分别访问它们,取决于我想从我的客户端做什么(写或读)。
我应该使用哪种Kubernetes资源来提供对我服务的每个成员的个人访问权限?
答案 0 :(得分:0)
要从外部访问每个广告连播,您可以为每个广告连播创建单独的服务,并使用NodePort
类型。
由于Service使用选择器来获取可用的后端,因此您只能为主服务器创建一个服务:
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暴露在网络之外。最好创建严格的防火墙规则来限制任何意外连接。