如何在ReplicaSet / Deployment创建的Pod上创建LoadBalancer服务

时间:2019-09-18 22:13:58

标签: kubernetes

我正在使用ReplicaSet来管理我的Pod,并尝试使用服务来公开这些Pod。由ReplicaSet创建的Pod具有随机名称。

NAME                   READY   STATUS    RESTARTS   AGE
master                 2/2     Running   0          20m
worker-4szkz           2/2     Running   0          21m
worker-hwnzt           2/2     Running   0          21m

由于某些政策限制我只能使用hostNetwork=true,因此我尝试通过服务公开这些Pod。我可以通过使用NodePort为每个Pod创建一个kubectl expose pod worker-xxxxx --type=NodePort服务来暴露它们。

这显然不是灵活的方法。我不知道如何创建服务(可能是LoadBalancer类型?)来动态访问我的ReplicaSet中的所有副本。如果有这样的部署,那也将是完美的。

感谢您的帮助和建议!

修改:

我在我的ReplicaSet上放置了一个标签,并选择了名为worker的NodePort类型服务。但是我无法在任何一个吊舱中ping worker。正确的方法是什么?

下面是kubectl describe service worker的给出方式。如Endpoints所示,吊舱已拾起。

Name:                     worker
Namespace:                default
Annotations:              <none>
Selector:                 tag=worker
Type:                     NodePort
IP:                       10.106.45.174
Port:                     port1  29999/TCP
TargetPort:               29999/TCP
NodePort:                 port1  31934/TCP
Endpoints:                10.32.0.3:29999,10.40.0.2:29999
Port:                     port2  29996/TCP
TargetPort:               29996/TCP
NodePort:                 port2  31881/TCP
Endpoints:                10.32.0.3:29996,10.40.0.2:29996
Port:                     port3  30001/TCP
TargetPort:               30001/TCP
NodePort:                 port3  31877/TCP
Endpoints:                10.32.0.3:30001,10.40.0.2:30001
Session Affinity:         None
External Traffic Policy:  Cluster
Events:                   <none>

1 个答案:

答案 0 :(得分:2)

我相信您可以通过使用Deployments而不是ReplicaSets(现在是标准方法)来对它进行一些优化,即您可以进行如下部署:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
  labels:
    app: nginx
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.7.9
        ports:
        - containerPort: 80

那么您要匹配的服务将是:

apiVersion: v1
kind: Service
metadata:
  name: nginx-service
spec:
  # This is the important part as this is what is used to route to 
  # the pods created by your deployment
  selector:
    app: nginx
  ports:
    - protocol: TCP
      port: 80
      targetPort: 80