Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/kubernetes/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Kubernetes 如何在ReplicaSet/Deployment创建的POD上创建LoadBalancer服务_Kubernetes - Fatal编程技术网

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

Kubernetes 如何在ReplicaSet/Deployment创建的POD上创建LoadBalancer服务,kubernetes,Kubernetes,我正在使用ReplicaSet来管理我的播客,并尝试使用服务公开这些播客。复制集创建的pod具有随机名称 NAME READY STATUS RESTARTS AGE master 2/2 Running 0 20m worker-4szkz 2/2 Running 0 21m worker-hwnzt 2/2

我正在使用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
我试图用服务公开这些pod,因为有些策略限制我使用
hostNetwork=true
。我可以通过使用
kubectl expose Pod worker-xxxxx--type=NodePort
为每个Pod创建
NodePort
服务来公开它们

这显然不是一种灵活的方式。我想知道如何创建一个服务(可能是LoadBalancer类型?)来动态访问复制集中的所有副本。如果有这样一个部署,那就太完美了

谢谢你的帮助和建议

编辑:

我在我的复制集上放置了一个标签,并使用一个名为
worker
的节点端口类型服务来选择该标签。但我无法在我的任何播客中
ping worker
。正确的做法是什么

以下是kubectl描述服务人员的方式。当
端点
显示吊舱被拾取时

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>
姓名:工人
名称空间:默认值
注释:
选择器:tag=worker
类型:节点端口
IP:10.106.45.174
端口:端口1 29999/TCP
目标端口:29999/TCP
节点端口:端口1 31934/TCP
终点:10.32.0.3:29999,10.40.0.2:29999
端口:端口2 29996/TCP
目标端口:29996/TCP
节点端口:端口2 31881/TCP
终点:10.32.0.3:29996,10.40.0.2:29996
端口:端口3 30001/TCP
目标端口:30001/TCP
节点端口:端口3 31877/TCP
终点:10.32.0.3:30001,10.40.0.2:30001
会话关联:无
外部流量策略:群集
活动:

我相信您可以通过使用部署而不是复制集(这是现在的标准方式)对此进行一些优化,也就是说,您可以进行如下部署:

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

我相信您可以通过使用部署而不是复制集(这是现在的标准方式)对此进行一些优化,也就是说,您可以进行如下部署:

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

您是否尝试将标签添加到部署中,例如行
app:worker
,并使用选择器
app:worker
创建服务?该服务应该在所有带有该标签的POD前面起到负载平衡器的作用。@bserdar我用匹配的选择器创建了一个类型
NodePort
服务,该服务在
端点中显示工作程序POD
。但是我无法在master中
ping worker
worker
是服务名称)。你知道我做错了吗?非常感谢。该服务名称在群集中外部不可见。集群中的所有POD都应该可以看到该名称。因为它是一个节点端口,所以任何工作程序都应该打开该端口,您可以使用workernode:port访问它。如果需要在群集中外部公开该服务,则需要入口,或者需要指向所有workernode:port节点的外部负载平衡器。@bserdar抱歉,我编辑了
kubectl get pods
输出。
master
是k8s集群中的一个pod,因此我希望它能够通过该服务与工作pod进行通信。我添加了对服务端口转发的编辑。我没有ping到正确的端口吗?谢谢您使用的是什么kube代理模式,iptables还是IPV?如果是iptables模式,则服务不可ping,因为iptables规则与icmp流量不匹配。尝试telnet worker 29999是否尝试将标签添加到部署、某物行
app:worker
,并使用选择器
app:worker
创建服务?该服务应该在所有带有该标签的POD前面起到负载平衡器的作用。@bserdar我用匹配的选择器创建了一个类型
NodePort
服务,该服务在
端点中显示工作程序POD
。但是我无法在master中
ping worker
worker
是服务名称)。你知道我做错了吗?非常感谢。该服务名称在群集中外部不可见。集群中的所有POD都应该可以看到该名称。因为它是一个节点端口,所以任何工作程序都应该打开该端口,您可以使用workernode:port访问它。如果需要在群集中外部公开该服务,则需要入口,或者需要指向所有workernode:port节点的外部负载平衡器。@bserdar抱歉,我编辑了
kubectl get pods
输出。
master
是k8s集群中的一个pod,因此我希望它能够通过该服务与工作pod进行通信。我添加了对服务端口转发的编辑。我没有ping到正确的端口吗?谢谢您使用的是什么kube代理模式,iptables还是IPV?如果是iptables模式,则服务不可ping,因为iptables规则与icmp流量不匹配。试试telnet worker 29999