kubernetes二进制集群部署 三 ——负载均衡调度器部
在前文中,我们介绍了如何通过kubeadm工具快速搭建kubernetes集群。但是,当我们需要在集群中运行一个有状态的应用时,需要使用到外部负载均衡器来实现域名解析、路由调度等功能。本文将介绍如何部署外部负载均衡调度器来满足这些需求。
1. 负载均衡器选择
在选择负载均衡调度器时,有很多选项可供选择,如haproxy、nginx、traefik、envoy等。我们这里选择traefik作为我们的负载均衡调度器。traefik是一个用于反向代理和负载均衡的开源工具,它能够自动地将Kubernetes Service和Ingress资源转换为负载均衡器规则,并通过使用各种后端基础设施(如Docker、Swarm、 Kubernetes、Mesos等)来将请求路由到不同的服务。
2. 安装traefik
我们在一台主机上安装traefik,作为我们的负载均衡器。我们可以使用命令helm repo add stable https://kubernetes-charts.storage.googleapis.com/来添加helm chart库。
接下来,我们使用helm install命令来安装traefik chart。注意,这里的traefik是指定的releasename,stable/traefik是指trarifk的chart名称。
helm install traefik stable/traefik \
--namespace kube-system \
--set ssl.insecureSkipVerify=true \
--set rbac.enabled=true \
--set kubernetes.ingressClass=traefik
3. 配置traefik
我们在使用traefik作为kubernetes的负载均衡调度器时,需要将traefik配置为kubernetes的ingress controller。我们在traefik的chart中,通过修改values.yaml文件来配置traefik。
...
kubernetes:
ingressClass: traefik
namespaces:
enabled: false
ssl:
insecureSkipVerify: true # 允许自签名证书
pilot:
enabled: false # 关闭pilot,使用kubernetes本身的ingress
rbac:
enabled: true
kind: DaemonSet
...
配置文件中,我们将kubernetes的ingressClass配置为traefik,并关闭了pilot,使用kubernetes本身的ingress。
接下来,我们为traefik安装一个证书。由于我们是在本地环境中测试,我们可以使用mkcert这个开源工具生成自签名证书。
$ brew install mkcert $ mkcert -install $ mkcert localhost
安装完成后,我们需要将证书文件导入到kubernetes secret中。在本地执行以下命令:
$ kubectl create secret tls traefik-cert --key localhost-key.pem --cert localhost.pem -n kube-system
最后,我们为我们的测试应用创建一个ingress资源,将其配置到traefik中。
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: test-ingress
annotations:
kubernetes.io/ingress.class: traefik
spec:
tls:
- hosts:
- localhost
secretName: traefik-cert
rules:
- host: localhost
http:
paths:
- path: /whoami
pathType: Prefix
backend:
service:
name: whoami
port:
name: http
我们可以在浏览器中访问https://localhost/whoami,将得到I'm <pod-name>。这代表着我们的负载均衡调度器已经正确地调度到了集群中的一个pod上。
总结
本文介绍了如何使用traefik作为kubernetes的负载均衡调度器,通过配置traefik和安装证书,最终将一个应用配置到ingress资源中,实现了负载均衡的功能。
