# LoadBalancer

负载均衡器都是由每一家云服务厂商自行提供的，用户只需要将Service的`spec.type`设置为`LoadBalancer`即可。

之前说LoadBalancer是NodePort的扩展，每一个LoadBalancer都有自己的独一无二的IP地址（独立于Node地址外），并将所有连接重定向至Service对象的Node的端口，然后再导至Pod。

## 创建LoadBalancer类型的Service

下面展示创建类型为LoadBalancer的Service。例如，创建一个名为`kubia-loadbalancer`的Service对象，其匹配包含标签`app=kubia`的Pod，并且这些Pod的端口号为`8080`，该负载均衡器监听的端口为`80`：

```yaml
apiVersion: v1
kind: Service
metadata:
  name: kubia-loadbalancer
spec:
  type: LoadBalancer
  ports:
  - port: 80
    targetPort: 8080
  selector:
    app: kubia
```

{% hint style="info" %}
⛩ 负载均衡器启动后，会为 Node 分配一个随机的真实的监听端口，当然也可以通过 `spec.ports.nodePort` 手动指定；

🛥 这里的负载均衡的 IP 和 80 端口都是由 iptables 生成的虚拟的，是无法 ping 通的；但是生成的 `nodePort` 是真实存在的；
{% endhint %}

外部客户端访问Service的架构图如下：

![LoadBalancer类型的Service对象](https://2906552408-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-M6Ub8CloS5kJszh6xSR%2Fsync%2F7128d73e86f24dfabe62ecb7fb35621ed10642b4.png?generation=1588594616614433\&alt=media)
