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