微服务架构

为私有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://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

测试

创建一个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 的欢迎信息。

上一篇 下一篇

猜你喜欢

热点阅读