当前位置: 首页 > 知识库问答 >
问题:

我自己的kubernetes跑步记录与官方记录的结果不一样

阎宝
2023-03-14

最近我一直在使用Kubernetes,我偶然发现了loadbalancer主题。我一直遵循此文档:https://kubernetes.io/docs/tasks/access-application-cluster/create-external-load-balancer/

我遵循了从yaml文件开始的完全相同的步骤:

apiVersion: v1
kind: Service
metadata:
  name: example-service
spec:
  selector:
    app: example
  ports:
    - port: 8765
      targetPort: 9376
  type: LoadBalancer

官方留档说结果是如果我做kubectl描述服务示例服务:

Name:                   example-service
    Namespace:              default
    Labels:                 <none>
    Annotations:            <none>
    Selector:               app=example
    Type:                   LoadBalancer
    IP:                     10.67.252.103
    LoadBalancer Ingress:   192.0.2.89
    Port:                   <unnamed> 80/TCP
    NodePort:               <unnamed> 32445/TCP
    Endpoints:              10.64.0.4:80,10.64.1.5:80,10.64.2.4:80
    Session Affinity:       None
    Events:                 <none>

但是,我的没有“负载均衡器入口”:

Name:                     example-service
Namespace:                default
Labels:                   <none>
Annotations:              <none>
Selector:                 app=example
Type:                     LoadBalancer
IP Families:              <none>
IP:                       10.1xx.1xx.1x
IPs:                      10.1xx.1xx.1x
Port:                     <unset>  8765/TCP
TargetPort:               9376/TCP
NodePort:                 <unset>  30956/TCP
Endpoints:                <none>
Session Affinity:         None
External Traffic Policy:  Cluster
Events:                   <none>

我想知道为什么?IPs是否与LoadBalancer入口相同?非常感谢你

共有1个答案

宿文栋
2023-03-14

您要创建LoadBalancer类型的库伯内特斯服务。
正如我们在库伯内特斯LoadBalancer留档中看到的:

在支持外部负载均衡器的云提供商上,将类型字段设置为LoadBalancer会为您的服务提供负载均衡器。

例如,当我们使用Google Kubernetes引擎(GKE)时:

创建LoadBalancer类型的服务时,Google Cloud控制器会唤醒并配置网络负载均衡器。

这是我的GKE集群中的一个示例:
注意:正如您在事件部分所看到的那样,负载平衡器是由Google云自动提供的。

$ kubectl describe services example-service                                                                                                                                
Name:                     example-service
Namespace:                default
Labels:                   <none>
Selector:                 app=example
Type:                     LoadBalancer
IP Families:              <none>
IP:                       10.0.1.66
IPs:                      <none>
LoadBalancer Ingress:     <MY_PUBLIC_IP>
Port:                     <unset>  8765/TCP
TargetPort:               9376/TCP
NodePort:                 <unset>  31158/TCP
Endpoints:                <none>
Session Affinity:         None
External Traffic Policy:  Cluster
Events:
  Type    Reason                Age   From                Message
  ----    ------                ----  ----                -------
  Normal  EnsuringLoadBalancer  30m   service-controller  Ensuring load balancer
  Normal  EnsuredLoadBalancer   29m   service-controller  Ensured load balancer

我从您的评论中得出结论,您没有使用任何托管Kubernetes服务(EKS、GKE、AKS等),而是在裸机上使用Kubernetes。

通常,如果您尝试在不在云提供商上运行的集群中创建“LoadBalancer”类型的Kubernetes服务,LoadBalancer将无限期地保持“挂起”状态。

这是我的裸机集群中的一个示例(示例服务处于“挂起”状态达23分钟):

$ kubectl get svc
NAME              TYPE           CLUSTER-IP      EXTERNAL-IP   PORT(S)          AGE
example-service   LoadBalancer   10.106.205.85   <pending>     8765:31091/TCP   23m

注意:与您的示例中一样,我也没有LoadBalancer入口条目:

$ kubectl describe svc example-service
Name:                     example-service
Namespace:                default
Labels:                   <none>
Selector:                 app=example
Type:                     LoadBalancer
IP:                       10.106.205.85
Port:                     <unset>  8765/TCP
TargetPort:               9376/TCP
NodePort:                 <unset>  31091/TCP
Endpoints:                <none>
Session Affinity:         None
External Traffic Policy:  Cluster
Events:                   <none>

裸机上的库伯内特斯需要一个负载均衡器实现,例如MetalLB来提供此功能。
注意:通常,MetalLB与云提供商不兼容:

MetalLB用于裸机集群,甚至提供“专用服务器”的云提供商通常也不支持MetalLB所需的网络协议。

我创建了一个示例来说明如何在具有MetalLB的裸机集群上创建LoadBalancer类型的库伯内特斯服务。

首先,我通过应用MetalLB安装留档中描述的清单来安装MetalLB

然后,我创建了configConfigMap,它使MetalLB可以控制特定的IP范围(请参阅第2层配置MetalLB留档):

$ cat config-cm.yml            
apiVersion: v1
kind: ConfigMap
metadata:
  namespace: metallb-system
  name: config
data:
  config: |
    address-pools:
    - name: default
      protocol: layer2
      addresses:
      - 192.168.11.200-192.168.11.210



$ kubectl apply -f config-cm.yml                                                                          
configmap/config created

最后,我创建了示例服务LoadBalancer,并检查它是否按预期工作:

$ kubectl apply -f example-service.yml 
service/example-service created

$ kubectl get svc example-service     
NAME              TYPE           CLUSTER-IP      EXTERNAL-IP      PORT(S)          AGE
example-service   LoadBalancer   10.103.71.220   192.168.11.200   8765:32001/TCP   8s


$ kubectl describe svc example-service
Name:                     example-service
Namespace:                default
Labels:                   <none>
Annotations:              <none>
Selector:                 app=example
Type:                     LoadBalancer
IP:                       10.103.71.220
LoadBalancer Ingress:     192.168.11.200
Port:                     <unset>  8765/TCP
TargetPort:               9376/TCP
NodePort:                 <unset>  32001/TCP
Endpoints:                <none>
Session Affinity:         None
External Traffic Policy:  Cluster
Events:                   <none>

正如您可以看到的,example-serviceService具有LoadBalancer In的条目,其地址为192.168.11.200

 类似资料:
  • 我正在尝试访问Rest Assured注入的HTTP头。Spring的模拟MVC让您可以通过MVC结果访问几乎所有内容,并且您可以使用这个结果来记录关于请求和响应的几乎所有内容。我能看到如何做到这一点的唯一方法是使用一个过滤器。但是,它为您提供了有限的请求访问权限(您只需要获得RequestSpecification)。我知道访问由HttpClient添加的头可能很棘手,但看起来您甚至无法访问由R

  • 华为,面试已结束 自我感觉三面不是很理想,祈祷华子收留我 中兴,虽然专业没有这么对口,最近还在恶补中,但base 西安,听说也是预研部门,如果能去感觉也不错 ———————————————————- 虽然岗位不匹配,但是面试官很nice,给我把简历释放了,还帮我联系了相关部门的hr,等重新安排中 荣耀,面完了资面和技术一面,荣子的面试流程观感很好,希望后边顺利吧 感觉今年研究所好难啊,挂在简历上真

  • 问题内容: 现在在我的应用程序中,某些时候我们正在将一些繁重的工作记录到日志文件中。 基本上仅用于日志记录,我们先创建可用数据的JSON,然后登录到Log文件。这是以JSON格式记录数据的业务要求。 现在从可用数据创建JSON,然后登录到FILE需要花费大量时间,并影响原始请求的返回时间。现在的想法是改善环境。 我们讨论的一件事是使用以下方法创建线程池 在我们的代码中,然后向其提交任务,该任务会将

  • 出身背景 我使用的是Postsharp版本3.0.42.9,并创建了一个自定义跟踪器属性(

  • 4399游戏后端开发工程师 面了大概半个多小时 上来自我介绍,问了点项目里的内容,然后接下来基本都是八股。 用过的容器,unodered_map底层是什么,答哈希表,问,哈希表的底层是什么?怎么找到对应关系?hash函数相关 map底层是什么?答红黑树,问什么是红黑树,红黑树有什么特点? 字符串匹配算法,说了下KMP 进程和线程相关的问题。 段错误相关内容。 用过图的数据结构吗? 了解哪些排序?归

  • 问题内容: 如何找到不同列级别之间以分钟为单位的日期差异,例如 如何获取第一条记录的EndDate与下一条记录的开始日期之间的差异与最后一条记录与NULL值之间的差异。 结果需要 谢谢 普拉夫 问题答案: