为私有Kubernetes集群创建LoadBalancer服务
2019-07-20 本文已影响0人
钾肥尔德
原文:https://blog.fleeto.us/post/intro-metallb/
在Kubernetes集群中,可以使用Nodeport、Loadbalancer和Ingress三种方式老来暴露服务给外部访问(缺省情况下,内部Pod提供的服务是在相互隔离的子网中,只有同一个Pod内部的几个容器可以直接进行网络访问)。不过,目前只有Nodeport和Ingress在Kuberntes有内部实现,而要使用Loadbalancer,只能在GCP/AWS等云服务平台上使用。Nodeport和Ingress有一定的局限性,这里介绍的MetalLB可以在私有的Kubernetes集群提供Loadbalancer至此,从而与云服务商的配置实现完全一致。
- 参考:
- 源码:https://github.com/google/metallb
- 文档:https://metallb.universe.tf/
- Nodeport、Loadbalancer和Ingress,https://my.oschina.net/u/2306127/blog/1647202
- 基于Kubernetes的服务网格系统
安装
- Metallb 支持 Helm 和 YAML 两种安装方法,这里我们使用第二种:
# https://metallb.universe.tf/installation/
kubectl apply -f https://raw.githubusercontent.com/google/metallb/v0.7.3/manifests/metallb.yaml
很简单,Metallb 就会开始安装,会生成自己的命名空间以及 RBAC 配置。
kubectl get pods -n metallb-system
NAME READY STATUS RESTARTS AGE
controller-9cdfcf55d-2nqjh 1/1 Running 0 8m22s
speaker-flhtn 1/1 Running 0 8m22s
speaker-gsx5f 1/1 Running 0 8m22s
speaker-pdfhj 1/1 Running 0 8m22s
配置
接下来我们要生成一个 Configmap 文件,为 Metallb 设置网址范围以及协议相关的选择和配置,这里以一个简单的二层配置为例:
apiVersion: v1
kind: ConfigMap
metadata:
namespace: metallb-system
name: config
data:
config: |
address-pools:
- name: my-ip-space
protocol: layer2
addresses:
- 10.211.55.240/28 #这里的IP地址范围需要根据集群实际情况对应,暴露给局域网可以用192.168.*.240/28
加载配置
kubectl apply -f Configmap.yaml
- 使用kubectl log -f [matellb-contoller-pod]能看到配置更新过程
测试
创建一个Nginx服务,服务类型为LoadBalancer
:
apiVersion: apps/v1beta2
kind: Deployment
metadata:
name: nginx
spec:
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1
ports:
- name: http
containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
name: nginx
spec:
ports:
- name: http
port: 80
protocol: TCP
targetPort: 80
selector:
app: nginx
type: LoadBalancer
服务创建运行之后,可以列出服务信息:
kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kube-dns ClusterIP 10.96.0.10 <none> 53/UDP,53/TCP 7d
nginx LoadBalancer 10.96.245.212 192.168.3.240 80:32207/TCP 54m
这里就发现,LoadBalancer 类型的服务,分配到了我们地址池中的第一个 IP
用curl http://192.168.3.240
验证,就会发现返回了 Nginx 的欢迎信息。