Instalar e configurar o controlador Traefik Ingress em k0s
Umcontrolador Ingressé uma API que gerencia o acesso externo aos serviços em um cluster Kubernetes e outros ambientes em contêineres. O roteamento do tráfego em torno de aplicativos no Kubernetes traz desafios e complexidades. Um controlador de entrada resolve esse problema fornecendo uma ponte entre o Kubernetes e serviços externos. Um controlador Ingress pode fornecer balanceamento de carga, hospedagem virtual baseada em nome e terminação SSL
As principais tarefas executadas por um Controlador Ingress são:
- Gerencie o tráfego de saída dentro de um cluster para serviços que precisam se comunicar com outros serviços fora de um cluster
- Aceite o tráfego de fora da plataforma Kubernetes e faça o balanceamento de carga para pods (contêineres) em execução dentro da plataforma
- Monitore os pods em execução no Kubernetes e atualize automaticamente as regras de balanceamento de carga quando os pods forem adicionados ou removidos de um serviço
Traefik Ingress Controller é um controlador de entrada do Kubernetes que gerencia o acesso aos serviços de cluster com suporte à especificação do Ingress. Ele foi originalmente projetado para fornecer um serviço de proxy reverso leve, mas com o tempo ganhou a capacidade de ser integrado a clusters Kubernetes.
Existem outras alternativas ao Traefik que incluem caddy eingress-nginx. O Traefik Ingress Controller é preferido devido aos seguintes recursos:
- Possui um painel com uma interface bonita
- É muito extensível com middlewares
- Possui documentação repleta de exemplos para cada tipo de provedor, para cada recurso
- Lida com a renovação automática do certificado TLS sem problemas
Neste guia, veremos como instalar e configurar o Traefik Ingress Controller no k0s.
Etapa 1 – Configurar cluster Kubernetes usando k0s
K0S é uma nova distribuição leve do Kubernetes da Mirantis que fornece o mínimo de extensões. Isso permite que os usuários personalizem suas preferências, como definir entrada, armazenamento e configurar o cluster durante a inicialização e controladores no manifesto CRD.
Para configurar um cluster Kubernetes usando k0s, use o auxílio do guia abaixo:
- Implantar cluster Kubernetes no Linux com k0s
Depois de configurado, instale e configure kubectl usando o comando:
curl -LO "https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/amd64/kubectl"
chmod +x kubectl
sudo mv kubectl /usr/local/bin
Permitir que o kubectl acesse seu cluster/
export KUBECONFIG=/var/lib/k0s/pki/admin.conf
Ou defina-o como permanente
mkdir ~/.kube
sudo cp /var/lib/k0s/pki/admin.conf ~/.kube/config
sudo chown $USER:$USER ~/.kube/config
Veja os nós disponíveis no cluster:
# kubectl get nodes
NAME STATUS ROLES AGE VERSION
master Ready control-plane 115s v1.26.2+k0s
node1 Ready <none> 75s v1.26.2+k0s
node2 NotReady <none> 61s v1.26.2+k0s
Passo 2 – Instale o controlador Traefik Ingress
Neste guia, instalaremos o controlador Traefik Ingress usando Helm. Comece instalando o Helm conforme abaixo
curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3
chmod 700 get_helm.sh
sudo ./get_helm.sh
Verifique a instalação:
$ helm version
version.BuildInfo{Version:"v3.11.1", GitCommit:"293b50c65d4d56187cd4e2f390f0ada46b4c4737", GitTreeState:"clean", GoVersion:"go1.18.10"}
Adicione o repositório do leme Traefik Ingress
helm repo add traefik https://helm.traefik.io/traefik
helm repo update
Instale o controlador Traefik Ingress usando o gráfico do leme.
helm install traefik traefik/traefik
Saída de amostra:
NAME: traefik
LAST DEPLOYED: Fri Aug 12 17:09:03 2022
NAMESPACE: default
STATUS: deployed
REVISION: 1
TEST SUITE: None
Como alternativa, você pode instalar o controlador Traefik Ingress com parâmetros adicionais conforme mostrado:
helm upgrade --install traefik \
--namespace traefik \
--set dashboard.enabled=true \
--set rbac.enabled=true \
--set nodeSelector.node-type=master \
--set="additionalArguments={--api.dashboard=true,--log.level=INFO,--providers.kubernetesingress.ingressclass=traefik-internal,--serversTransport.insecureSkipVerify=true}" \
traefik/traefik \
--version <version>
Verifique a instalação:
# kubectl get all
NAME READY STATUS RESTARTS AGE
pod/traefik-f89df87d4-bqqpf 1/1 Running 0 72s
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 3m48s
service/traefik LoadBalancer 10.111.222.143 <pending> 80:30619/TCP,443:32519/TCP 72s
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/traefik 1/1 1 1 72s
NAME DESIRED CURRENT READY AGE
replicaset.apps/traefik-f89df87d4 1 1 1 72s
A partir da saída acima, temos um serviço LoadBalancer com um endereço IP externo pendente. Isso será configurado posteriormente no guia.
Visualize os CRDs do Traefik com o comando;
# kubectl get crd |grep traefik
ingressroutes.traefik.containo.us 2022-08-12T09:45:05Z
ingressroutetcps.traefik.containo.us 2022-08-12T09:45:05Z
ingressrouteudps.traefik.containo.us 2022-08-12T09:45:05Z
middlewares.traefik.containo.us 2022-08-12T09:45:05Z
middlewaretcps.traefik.containo.us 2022-08-12T09:45:05Z
serverstransports.traefik.containo.us 2022-08-12T09:45:05Z
tlsoptions.traefik.containo.us 2022-08-12T09:45:05Z
tlsstores.traefik.containo.us 2022-08-12T09:45:05Z
traefikservices.traefik.containo.us 2022-08-12T09:45:05Z
Passo 3 – Instalar e configurar o MetalLB
MetalLB é uma solução Kubernetes que permite monitorar serviços do tipo LoadBalancer e atribuir-lhes um endereço IP de uma piscina virtual. Ele permite acessar serviços Kubernetes a partir de um IP lógico.
Isso pode ser instalado usando os comandos:
git clone https://github.com/techviewleo/metalLB.git && cd metalLB
kubectl apply -f namespace.yaml
kubectl apply -f metallb.yaml
Crie o mapa de configuração
vim metallb-config.yaml
O arquivo contém um pool virtual com um intervalo de IP endereçável que funciona em sua máquina local.
apiVersion: v1
kind: ConfigMap
metadata:
namespace: metallb-system
name: config
data:
config: |
address-pools:
- name: default
protocol: layer2
addresses:
- 192.168.205.40-192.168.205.50
Aplique o manifesto com o comando:
kubectl apply -f metallb-config.yaml
Depois disso, o serviço LoadBalalcer terá um endereço IP externo conforme mostrado:
# kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 6m25s
traefik LoadBalancer 10.111.222.143 192.168.205.40 80:30619/TCP,443:32519/TCP 3m49s
Agora atualize a entrada DNS do seu domínio adicionando o endereço IP fornecido a /etc/hosts
$ sudo vim /etc/hosts
192.168.205.40 traefik.computingforgeeks.com
Passo 4 – Implante e acesse o painel Traefik
Agora que seu cluster tem um endereço IP/nome de domínio, você pode acessar facilmente o Traefik Dashboard e os serviços da web. Mas atualmente o serviço não está disponível porque não temos nenhum Ingress criado.
# curl http://traefik.computingforgeeks.com
404 page not found
O painel do Traefik escuta na porta 9000 que não foi exposta. Para expô-lo, edite o serviço Traefik:
kubectl edit svc/traefik
No arquivo aberto, encontre o segmento ports e adicione as linhas abaixo:
ports:
........
- name: traefik
port: 9000
protocol: TCP
targetPort: traefik
......
Salve o arquivo e verifique se as alterações foram feitas:
# kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 9m16s
traefik LoadBalancer 10.106.13.208 192.168.205.40 80:30504/TCP,443:30232/TCP,9000:31827/TCP 13m
Agora prossiga e acesse o Traefik Dashboard usando a URL http://domain_name:9000/dashboard/ (não esqueça de incluir a barra no final da URL)
Etapa 5 – Teste o Traefik Ingress no Kubernetes
Para testar se o Controlador Traefik Ingress no k0s está funcionando conforme desejado, criaremos uma aplicação simples conforme abaixo;
vim whoami.yaml
Adicione as linhas abaixo ao arquivo:
---
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: whoami
name: whoami
spec:
replicas: 1
selector:
matchLabels:
app: whoami
template:
metadata:
labels:
app: whoami
spec:
containers:
- image: traefik/whoami:latest
name: whoami
ports:
- containerPort: 80
Aplique o manifesto:
kubectl create -f whoami.yaml
Crie um serviço do tipo ClusterIP para o aplicativo
vim service.yaml
Adicione as linhas abaixo:
---
apiVersion: v1
kind: Service
metadata:
name: whoami-svc
spec:
type: ClusterIP
selector:
app: whoami
ports:
- port: 80
Crie o serviço:
kubectl create -f service.yaml
Verifique a criação:
# kubectl describe svc whoami
Name: whoami-svc
Namespace: default
Labels: <none>
Annotations: <none>
Selector: app=whoami
Type: ClusterIP
IP Family Policy: SingleStack
IP Families: IPv4
IP: 10.102.149.75
IPs: 10.102.149.75
Port: <unset> 80/TCP
TargetPort: 80/TCP
Endpoints: 10.244.1.5:80
Session Affinity: None
Events: <none>
Agora, esse aplicativo ainda não estará acessível até que você crie um Ingress para expor o serviço.
vim app-ingress.yaml
Adicione as linhas abaixo e substitua host pelo nome de domínio adicionado em /etc/hosts para o endereço IP externo:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: whoami-http
annotations:
traefik.ingress.kubernetes.io/router.entrypoints: web
spec:
rules:
- host: traefik.computingforgeeks.com
http:
paths:
- path: /whoami
pathType: Prefix
backend:
service:
name: whoami-svc
port:
number: 80
Aplique o ingresso:
kubectl apply -f app-ingress.yaml
Visualize o Ingress criado:
# kubectl get Ingress
NAME CLASS HOSTS ADDRESS PORTS AGE
whoami-http <none> traefik.computingforgeeks.com 80 9s
Agora acesse a implantação usando a URL http://domain_name/whoami
É isso!
Considerações finais
Isso marca o fim deste guia sobre como instalar e configurar o Traefik Ingress Controller em k0s. O conhecimento aqui adquirido pode ser utilizado para configurar serviços Kubernetes e acessá-los remotamente por meio de um nome de domínio. Espero que isso tenha sido de grande significado para você.
Ver mais:
- Implante o controlador Nginx Ingress no Kubernetes usando Helm Chart
- Use certificados Let's Encrypt SSL em entradas/rotas do OpenShift 4.x
- Instale MicroK8s Kubernetes no Rocky Linux 9/AlmaLinux 9