LoadBalancer
安装openelb
kubectl apply -f https://raw.githubusercontent.com/openelb/openelb/master/deploy/openelb.yaml
使用layer2模式
metadata
:
name
: Name of the Eip object.
spec
:
address
: 一个或多个 IP 地址:192.168.0.100
.192.168.0.0/24
.192.168.0.91-192.168.0.100
.
protocol
: 指定 Eip 对象用于哪种 OpenELB 模式。该值可以是layer2
或bgp
。如果未指定此字段,bgp
则使用默认值。interface
:OpenELB 在其上侦听 ARP 或 NDP 请求的 NIC。该字段仅在protocol
设置为时有效layer2
。
kubectl apply -f layer2-eip.yaml
apiVersion: network.kubesphere.io/v1alpha2
kind: Eip
metadata:
name: layer2-eip
spec:
address: 192.168.0.91-192.168.0.100
interface: eth0
protocol: layer2
svc使用loadbalancer
- 您必须设置
spec:type
为LoadBalancer
。 lb.kubesphere.io/v1alpha1: openelb
注释指定服务使用 OpenELB 。- 该
protocol.openelb.kubesphere.io/v1alpha1: layer2
注释指定 OpenELB 用于第 2 层模式。 eip.openelb.kubesphere.io/v1alpha2: layer2-eip
注解指定 OpenELB 使用的 Eip 对象。如果未配置此注解,OpenELB 会自动使用与协议匹配的第一个可用 Eip 对象。您也可以删除此注解并添加spec:loadBalancerIP
字段(例如spec:loadBalancerIP: 192.168.0.91
)以将特定 IP 地址分配给服务。- 如果
spec:externalTrafficPolicy
设置为Cluster
(默认值),OpenELB 从所有 Kubernetes 集群节点中随机选择一个节点来处理 Service 请求。也可以通过 kube-proxy 访问其他节点上的 Pod。 - 如果
spec:externalTrafficPolicy
设置为Local
,OpenELB 会在 Kubernetes 集群中随机选择一个包含 Pod 的节点来处理 Service 请求。只能访问选定节点上的 Pod。
kind: Service
apiVersion: v1
metadata:
name: nginx-svc
annotations:
lb.kubesphere.io/v1alpha1: openelb
protocol.openelb.kubesphere.io/v1alpha1: layer2
eip.openelb.kubesphere.io/v1alpha2: layer2-eip
spec:
selector:
app: nginx
type: LoadBalancer
ports:
- protocol: TCP
port: 80
targetPort: 80
externalTrafficPolicy: Cluster