Kubernetns LB措施:无需云厂商的动态DNS和负载均衡
发布时间:2021-06-06 17:29:35 所属栏目:云计算 来源:互联网
导读:我们经常谈论托管Kubernetes或在云中运行的Kubernetes,但我们也在非云的环境(例如VMware或裸机服务器)上运行Kubernetes。 您可能还会听到很多有关云供应商集成的经典案例:您可以获取无密码凭据来访问托管服务,无需手动干预即可配置云负载均衡器,自动创建
我们经常谈论托管Kubernetes或在云中运行的Kubernetes,但我们也在非云的环境(例如VMware或裸机服务器)上运行Kubernetes。
您可能还会听到很多有关云供应商集成的经典案例:您可以获取无密码凭据来访问托管服务,无需手动干预即可配置云负载均衡器,自动创建DNS条目等。
在本地运行时,通常无法使用这些集成功能,除非您使用的是受支持的云平台(如 OpenStack)。那么当在裸机或VM上运行时,如何获得Cloud Native环境的自动化优势?
所以让我们一步一步去看我们所想实现的功能。
本文中使用的所有清单均可在github项目中(https://github.com/clusterfrak-dynamics/gitops-template)获取。
GitOps
与往常一样,我们使用GitOps和FluxCD将我们的资源部署到集群中,无论它们是在云上还是在本地。你可以参考跟多我们关于Flux的文章。
首先,您可以使用我们的GitOps模板,并根据需要对其进行自定义。kubectl如果更合适,您也可以直接部署清单 。
以下让我们深入研究我们的组件。
负载均衡
在云上运行kubernetns时,通常可以立即使用Load Balancer。在裸机或VM上运行时,负载均衡器保持pending不可用状态。
因此,首先,我们希望我们的服务类型LoadBalancer不处于pending不可用状态,并且能够在需要时提供动态负载平衡器,而无需手动配置haproxy或其他类似的服务。
metallb可以提供两种模式的虚拟负载均衡器的实现:
BGP协议
ARP
后者更简单,因为它可以在几乎任何二层网络上工作,而无需进一步配置。
在ARP模式下,metallb的配置非常简单。您只需要给它提供一些可以使用的IP就可以了。
配置清单可在此处或官方文件中找到。要配置所需的IP地址,可以使用ConfigMap完成。
metallb-config.yaml:
apiVersion: v1
kind: ConfigMap
metadata:
namespace: metallb-system
name: config
data:
config: |
address-pools:
- name: default
protocol: layer2
addresses:
- 10.10.39.200-10.10.39.220
您还需要生成一个密钥来加密Metallb组件通信,您可以使用以下脚本来生成Kubernetes secret yaml:
kubectl create secret generic -n metallb-system memberlist --from-literal=secretkey="$(openssl rand -base64 128)" -o yaml --dry-run=client > metallb-secret.yaml
部署完所有内容后,您应该在metallb-system namespace内看到相应的pods :
NAME READY STATUS RESTARTS AGE
controller-57f648cb96-tvr9q 1/1 Running 0 2d1h
speaker-7rd8p 1/1 Running 0 2d1h
speaker-7t7rg 1/1 Running 0 2d1h
speaker-8qm2t 1/1 Running 0 2d1h
speaker-bks4s 1/1 Running 0 2d1h
speaker-cz6bc 1/1 Running 0 2d1h
speaker-h8b54 1/1 Running 0 2d1h
speaker-j6bss 1/1 Running 0 2d1h
speaker-phvv7 1/1 Running 0 2d1h
speaker-wdwjc 1/1 Running 0 2d1h
speaker-xj25p 1/1 Running 0 2d1h
![]() (编辑:宣城站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |