跳转到内容
主菜单
主菜单
移至侧栏
隐藏
导航
首页
最近更改
随机页面
MediaWiki帮助
代码酷
搜索
搜索
中文(中国大陆)
外观
创建账号
登录
个人工具
创建账号
登录
未登录编辑者的页面
了解详情
贡献
讨论
编辑“︁
Kubernetes LoadBalancer
”︁
页面
讨论
大陆简体
阅读
编辑
编辑源代码
查看历史
工具
工具
移至侧栏
隐藏
操作
阅读
编辑
编辑源代码
查看历史
常规
链入页面
相关更改
特殊页面
页面信息
外观
移至侧栏
隐藏
您的更改会在有权核准的用户核准后向读者展示。
警告:
您没有登录。如果您进行任何编辑,您的IP地址会公开展示。如果您
登录
或
创建账号
,您的编辑会以您的用户名署名,此外还有其他益处。
反垃圾检查。
不要
加入这个!
{{DISPLAYTITLE:Kubernetes LoadBalancer}} '''Kubernetes LoadBalancer''' 是 Kubernetes 中一种服务类型,用于将外部流量分发到集群内的多个 Pod。它通常与云服务提供商的负载均衡器集成,自动创建外部负载均衡器,并将流量路由到匹配的 Service。本指南将详细介绍 LoadBalancer 的概念、工作原理、配置方法及实际应用场景。 == 概述 == LoadBalancer 是 Kubernetes [[Service]] 的一种类型,扩展了 [[NodePort]] 的功能。当创建一个 LoadBalancer 类型的 Service 时,Kubernetes 会: * 分配一个集群内部的 ClusterIP。 * 在每个节点上开放一个 NodePort。 * 自动请求云提供商(如 AWS、GCP、Azure)配置一个外部负载均衡器,将流量转发到该 Service。 LoadBalancer 适用于需要从集群外部访问服务的场景,例如公开 Web 应用程序或 API。 == 工作原理 == LoadBalancer 的工作流程如下: 1. 用户创建 LoadBalancer 类型的 Service。 2. Kubernetes 控制平面与云提供商 API 交互,请求创建负载均衡器。 3. 云提供商配置负载均衡器,并将其指向集群的 NodePort。 4. 外部流量通过负载均衡器的 IP 或 DNS 名称进入,并分发到各个节点上的 NodePort。 5. 节点上的 kube-proxy 将流量转发到后端 Pod。 <mermaid> graph LR A[External Client] --> B[Cloud Load Balancer] B --> C[NodePort on Node1] B --> D[NodePort on Node2] C --> E[Pod1] D --> F[Pod2] </mermaid> == 配置 LoadBalancer Service == 以下是一个典型的 LoadBalancer Service 的 YAML 配置示例: <syntaxhighlight lang="yaml"> apiVersion: v1 kind: Service metadata: name: my-loadbalancer-service spec: type: LoadBalancer selector: app: my-app ports: - protocol: TCP port: 80 targetPort: 8080 </syntaxhighlight> === 字段说明 === * '''type: LoadBalancer''':指定 Service 类型为 LoadBalancer。 * '''selector''':定义哪些 Pod 属于该 Service(通过标签匹配)。 * '''ports''': * '''port''':Service 暴露的端口(外部访问的端口)。 * '''targetPort''':Pod 上监听的端口。 == 示例:部署 LoadBalancer Service == 假设我们有一个名为 `my-app` 的 Deployment,运行在端口 8080 上: 1. 创建 Deployment: <syntaxhighlight lang="yaml"> apiVersion: apps/v1 kind: Deployment metadata: name: my-app spec: replicas: 3 selector: matchLabels: app: my-app template: metadata: labels: app: my-app spec: containers: - name: my-app image: nginx:latest ports: - containerPort: 8080 </syntaxhighlight> 2. 应用 LoadBalancer Service: <syntaxhighlight lang="bash"> kubectl apply -f loadbalancer-service.yaml </syntaxhighlight> 3. 检查 Service 状态: <syntaxhighlight lang="bash"> kubectl get svc my-loadbalancer-service </syntaxhighlight> 输出示例: <pre> NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE my-loadbalancer-service LoadBalancer 10.96.123.456 203.0.113.10 80:32456/TCP 1m </pre> * '''EXTERNAL-IP''' 是云提供商分配的负载均衡器 IP。 * 访问 `http://203.0.113.10` 将流量路由到后端 Pod。 == 高级配置 == === 特定云提供商注解 === 不同云提供商支持通过注解(annotations)自定义负载均衡器行为。例如,在 AWS 上配置 HTTPS 负载均衡器: <syntaxhighlight lang="yaml"> metadata: annotations: service.beta.kubernetes.io/aws-load-balancer-ssl-cert: "arn:aws:acm:us-west-2:123456789012:certificate/xxxxxx" service.beta.kubernetes.io/aws-load-balancer-backend-protocol: "http" </syntaxhighlight> === 保留客户端 IP === 默认情况下,负载均衡器会屏蔽客户端 IP。如需保留,可配置 `externalTrafficPolicy`: <syntaxhighlight lang="yaml"> spec: externalTrafficPolicy: Local </syntaxhighlight> == 实际应用场景 == 1. '''公开 Web 应用''':将前端服务暴露给互联网用户。 2. '''API 网关''':为微服务架构提供统一的入口。 3. '''混合云部署''':在跨云环境中分发流量。 == 限制与注意事项 == * LoadBalancer 依赖于云提供商的支持,本地集群(如 Minikube)可能需要额外插件。 * 每个 LoadBalancer Service 通常会产生云服务费用。 * 对于非云环境,可以考虑 [[MetalLB]] 等替代方案。 == 总结 == Kubernetes LoadBalancer 提供了一种简单的方式将服务暴露到集群外部,并与云基础设施无缝集成。通过合理配置,可以实现高可用、可扩展的流量分发。初学者应从基础配置开始,逐步探索高级功能如 TLS 终止和客户端 IP 保留。 == 参见 == * [[Kubernetes Services]] * [[Kubernetes Ingress]] * [[Kubernetes Networking]] [[Category:集成部署]] [[Category:Kubernetes]] [[Category:Kubernetes服务与网络]]
摘要:
请注意,所有对代码酷的贡献均被视为依照知识共享署名-非商业性使用-相同方式共享发表(详情请见
代码酷:著作权
)。如果您不希望您的文字作品被随意编辑和分发传播,请不要在此提交。
您同时也向我们承诺,您提交的内容为您自己所创作,或是复制自公共领域或类似自由来源。
未经许可,请勿提交受著作权保护的作品!
取消
编辑帮助
(在新窗口中打开)