任务

Kubernetes v1.13 版本的文档已不再维护。您现在看到的版本来自于一份静态的快照。如需查阅最新文档,请点击 最新版本。

任务
管理集群
管理集群
Access Clusters Using the Kubernetes API (EN)
Autoscale the DNS Service in a Cluster (EN)
Debug DNS 方案
IP Masquerade Agent User Guide (EN)
Kubernetes Cloud Controller Manager (EN)
Namespaces Walkthrough (EN)
Operating etcd clusters for Kubernetes (EN)
Reconfigure a Node's Kubelet in a Live Cluster (EN)
Reserve Compute Resources for System Daemons (EN)
Safely Drain a Node while Respecting Application SLOs (EN)
Securing a Cluster (EN)
Set up High-Availability Kubernetes Masters (EN)
Share a Cluster with Namespaces (EN)
Storage Object in Use Protection
Using a KMS provider for data encryption (EN)
为节点发布扩展资源
使用 Calico 来提供 NetworkPolicy
使用 CoreDNS 进行服务发现
使用 Romana 来提供 NetworkPolicy
使用 Weave 网络来提供 NetworkPolicy
关键插件 Pod 的调度保证
在 Kubernetes 中配置私有 DNS 和上游域名服务器
在 Kubernetes 集群中使用 sysctl
声明网络策略
应用资源配额和限额
开发云控制器管理器
控制节点上的CPU管理策略
改变默认 StorageClass
更改 PersistentVolume 的回收策略
设置 Pod CPU 和内存限制
访问集群上运行的服务
通过配置文件设置 Kubelet 参数
配置 API 对象配额
配置命名空间下pod总数
配置多个调度器
配置资源不足时的处理方式
限制存储消耗
集群管理
静态 Pods
静态加密 Secret 数据
安装网络策略驱动
Extend kubectl with plugins (EN)
管理巨页(HugePages)
自动伸缩集群中的 DNS 服务
调度 GPU

Edit This Page

创建一个外部负载均衡器

本文展示如何创建一个外部负载均衡器。

创建服务时,您可以选择自动创建云网络负载均衡器。这提供了一个外部可访问的 IP 地址,可将流量分配到集群节点上的正确端口上 _假设集群在支持的环境中运行,并配置了正确的云负载平衡器提供商包_。

有关如何配置和使用 Ingress 资源以为服务提供外部可访问的 URL、负载均衡流量、终止 SSL 等功能,请查看 Ingress 文档。

准备开始

To check the version, enter kubectl version.

配置文件

要创建外部负载均衡器,请将以下内容添加到 服务配置文件

    "type": "LoadBalancer"

您的配置文件可能会如下所示:

    {
      "kind": "Service",
      "apiVersion": "v1",
      "metadata": {
        "name": "example-service"
      },
      "spec": {
        "ports": [{
          "port": 8765,
          "targetPort": 9376
        }],
        "selector": {
          "app": "example"
        },
        "type": "LoadBalancer"
      }
    }

使用 kubectl

您也可以使用 kubectl expose 命令及其 --type=LoadBalancer 参数创建服务:

kubectl expose rc example --port=8765 --target-port=9376 \
        --name=example-service --type=LoadBalancer

此命令通过使用与引用资源(在上面的示例的情况下,名为 example 的 replication controller)相同的选择器来创建一个新的服务。

更多信息(包括更多的可选参数),请参阅 kubectl expose reference

找到您的 IP 地址

您可以通过 kubectl 获取服务信息,找到为您的服务创建的 IP 地址:

kubectl describe services example-service

这将获得如下输出:

    Name:                   example-service
    Namespace:              default
    Labels:                 <none>
    Annotations:            <none>
    Selector:               app=example
    Type:                   LoadBalancer
    IP:                     10.67.252.103
    LoadBalancer Ingress:   123.45.678.9
    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>

IP 地址列在 LoadBalancer Ingress 旁边。

Note:

注意: 如果您在 Minikube 上运行服务,您可以通过以下命令找到分配的 IP 地址和端口:

minikube service example-service --url

保留客户端源 IP

由于此功能的实现,目标容器中看到的源 IP 将 *不是客户端的原始源 IP*。要启用保留客户端 IP,可以在服务的 spec 中配置以下字段(支持 GCE/Google Kubernetes Engine 环境):

可以通过在服务的配置文件中将 externalTrafficPolicy 设置为 “Local” 来激活此功能。

    {
      "kind": "Service",
      "apiVersion": "v1",
      "metadata": {
        "name": "example-service"
      },
      "spec": {
        "ports": [{
          "port": 8765,
          "targetPort": 9376
        }],
        "selector": {
          "app": "example"
        },
        "type": "LoadBalancer",
        "externalTrafficPolicy": "Local"
      }
    }

特性可用性

k8s 版本 特性支持
1.7+ 支持完整的 API 字段
1.5 - 1.6 支持 Beta Annotation
<1.5 不支持

您可以在下面找到已弃用的 Beta annotation,在稳定版本前使用它来使用该功能。较新的 Kubernetes 版本可能会在 v1.7 之后停止支持这些功能。 请更新现有应用程序以直接使用这些字段。

service.beta.kubernetes.io/external-traffic annotation 与 service.spec.externalTrafficPolicy 字段相比拥有一组不同的值。值匹配如下:

请注意,此功能目前尚未实现在所有云提供商/环境中。

已知的问题:

外部负载均衡器提供商

请务必注意,此功能的数据路径由 Kubernetes 集群外部的负载均衡器提供。

当服务类型设置为 LoadBalancer 时,Kubernetes 向集群中的 pod 提供与 type=<ClusterIP> 等效的功能,并通过使用 Kubernetes pod 的条目对负载均衡器(从外部到 Kubernetes)进行编程来扩展它。 Kubernetes 服务控制器自动创建外部负载均衡器,健康检查(如果需要),防火墙规则(如果需要),并获取云提供商分配的外部 IP 并将其填充到服务对象中。

保留源 IP 时的注意事项和限制

GCE/AWS 负载均衡器不为其目标池提供权重。对于旧的 LB kube-proxy 规则来说,这不是一个问题,它可以在所有端点之间正确平衡。

使用新功能,外部流量不会在 pod 之间平均负载,而是在节点级别平均负载(因为 GCE/AWS 和其他外部 LB 实现无法指定每个节点的权重,因此它们的平衡跨所有目标节点,并忽略每个节点上的 pod 数量)。

但是,我们可以声明,对于 NumServicePods << NumNodes 或 NumServicePods >> NumNodes 时,即使没有权重,也会看到接近相等的分布。

一旦外部负载平衡器提供权重,就可以将此功能添加到 LB 编程路径中。 未来工作:1.4 版本不提供权重支持,但可能会在将来版本中添加

内部 pod 到 pod 的流量应该与 ClusterIP 服务类似,所有 pod 的概率相同。

反馈