其他分享
首页 > 其他分享> > Kubernetes(k8s)集群部署八、 LoadBlancer+ MetalLB

Kubernetes(k8s)集群部署八、 LoadBlancer+ MetalLB

作者:互联网

https://metallb.universe.tf/installation/

MetalLB挂接到您的Kubernetes集群中,并提供了网络负载平衡器实现。简而言之,它允许您在未在云提供商上运行的集群中创建类型为“ LoadBalancer”的Kubernetes服务,因此不能简单地使用付费产品来提供负载均衡器。

它具有两个可以共同提供此服务的功能:地址分配和外部通知。

地址分配

在启用了云的Kubernetes集群中,您需要一个负载均衡器,并且您的云平台会为您分配一个IP地址。在裸机集群中,MetalLB负责该分配。

MetalLB无法凭空创建IP地址,因此您必须为其提供IP地址池,以供其使用。当服务来来去去时,MetalLB将负责分配和取消分配单个地址,但它只会分发作为其已配置池一部分的IP。

如何获得MetalLB的IP地址池取决于您的环境。如果您在托管设备中运行裸机群集,则托管服务提供商可能会提供IP地址以供租用。在这种情况下,您将租用/ 26个IP空间(64个地址),并将该范围提供给MetalLB以用于群集服务。

另外,您的群集可能完全是私有的,为附近的LAN提供服务,但不暴露于Internet。在这种情况下,您可以从一个专用地址空间(所谓的RFC1918地址)中选择一个IP范围,并将其分配给MetalLB。这样的地址是免费的,并且只要您仅向LAN提供群集服务就可以正常工作。

或者,您可以两者都做!MetalLB使您可以定义任意数量的地址池,而不必关心您给它的地址的“种类”。
在这里插入图片描述
在这里插入图片描述

要安装MetalLB,请应用清单

下载所需yaml文件

kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/v0.9.5/manifests/namespace.yaml
kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/v0.9.5/manifests/metallb.yaml
# On first install only
kubectl create secret generic -n metallb-system memberlist --from-literal=secretkey="$(openssl rand -base64 128)"`

提前下载文件,下载所需镜像

[root@server2 metallb]# ls
metallb.yaml  namespace.yaml
[root@server2 metallb]# vim metallb.yaml 
[root@server2 metallb]# cat namespace.yaml 
apiVersion: v1
kind: Namespace
metadata: 
  name: metallb-system
  labels:
    app: metallb

建立一个共有项目metallb
99 docker pull metallb/speaker:v0.9.5
100 docker tag metallb/speaker:v0.9.5 reg.westos.org/metallb/speaker:v0.9.5
101 docker push reg.westos.org/metallb/speaker:v0.9.5
102 docker pull metallb/controller:v0.9.5
103 docker tag metallb/controller:v0.9.5 reg.westos.org/metallb/controller:v0.9.5
104 docker push reg.westos.org/metallb/controller:v0.9.5

kubectl create secret generic -n metallb-system memberlist --from-literal=secretkey="$(openssl rand -base64 128)"

外部的主机可以通过ip进行访问
实现负载均衡
或者,

[root@server2 metallb]# cat config.yaml 
apiVersion: v1
kind: ConfigMap
metadata:
  namespace: metallb-system
  name: config
data:
  config: |
    address-pools: #地址池
    - name: default  
      protocol: layer2   #二层协议
      addresses:
      - 172.25.10.100-172.25.10.200

[root@server2 metallb]# kubectl apply -f config.yaml
configmap/config created

[root@server2 metallb]# cat nginx-svc.yml 
---
apiVersion: v1
kind: Service
metadata:
  name: nginx-svc
spec:
  selector:
    app: nginx
  ports:
  - protocol: TCP
    port: 80
    targetPort: 80
  type: LoadBalancer

---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: deployment
spec:
  replicas: 2
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: myapp
        image: myapp:v1

[root@server2 metallb]# kubectl apply -f nginx-svc.yml
service/nginx-svc configured
deployment.apps/deployment unchanged
在这里插入图片描述
集群内部通过svc的地址访问,集群外部通过分配到的ip访问。

[root@server2 metallb]# curl 10.109.11.243
Hello MyApp | Version: v1 | <a href="hostname.html">Pod Name</a>
[root@localhost file_recv]# curl 172.25.10.100
Hello MyApp | Version: v1 | <a href="hostname.html">Pod Name</a>

标签:MetalLB,metallb,Kubernetes,server2,yaml,v0.9,k8s,root
来源: https://blog.csdn.net/ninimino/article/details/114336933