如何在Kubernetes集群之外公开“基于选举的主和辅助”服务?

时间:2018-03-28 10:34:32

标签: mongodb kubernetes

我一直在尝试在Kubernetes中实现一个服务,其中每个Pod都需要从群集外部访问。

我的服务拓扑很简单:3名成员,其中一名成员随时担任主人(基于选举);写入主要;读到二级。这是MongoDB副本设置的方式。

他们在内部 Kubernetes集群中没有问题,但是从外部我唯一拥有的是NodePort服务类型,可以将传入连接负载平衡到其中一个,但我需要分别访问它们,取决于我想从我的客户端做什么(写或读)。

我应该使用哪种Kubernetes资源来提供对我服务的每个成员的个人访问权限?

1 个答案:

答案 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暴露在网络之外。最好创建严格的防火墙规则来限制任何意外连接。