Atividade 05 - Network
Introdução
A partir dessa aula, sempre que encontrar um endereço com o sufixo <IP_DO_INGRESS>.nuvem.unicamp.br, trocar o <IP_DO_INGRESS> pelo IP obtido na instalação do Ingress do seu cluster.
Instalando Helm
Há vários métodos de instalação, a documentação completa está em: https://helm.sh/pt/docs/intro/install/
Instale o helm utilizando o comando:
curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash
Configure o auto-complete
helm completion bash > /etc/bash_completion.d/helm
source /etc/bash_completion.d/helm
LoadBalancer Controller
Instale o LoadBalancer Controller para conectar ao VCD e ao Load Balancer HAProxy externo já configurado previamente
helm install lb-controller oci://registry.nuvem.unicamp.br/dssof/lb-controller-chart --namespace lb-controller-system --create-namespace \
--set vcd.host=https://vcd.nuvem.unicamp.br \
--set vcd.username=lb-controller \
--set vcd.password=lb-controller-123 \
--set vcd.org=UKS \
--set vcd.vdc="UKS VDC" \
--set vcd.edgeGateway="UKS Edge" \
--set vcd.ipSpace="IPv4 Publico" \
--set haproxy.ip=10.7.100.5 \
--set haproxy.username=admin \
--set haproxy.password=password \
--set clusterName=cluster00
Ingress Controller
Para utilizar o recurso Ingress, é necessário instalar um Ingress Controller
helm install ingress-nginx ingress-nginx \
--repo https://kubernetes.github.io/ingress-nginx \
--namespace ingress-nginx \
--create-namespace \
--set controller.hostPort.enabled=true \
--set controller.ingressClassResource.default=true
Obtenha o IP do ingress-nginx
kubectl get svc -n ingress-nginx
Anote esse IP para uso nas atividades posteriores
Ingress
Criar um Deployment que exponha a porta 80
deployment-ingress.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: meu-app
spec:
selector:
matchLabels:
app: meu-app
replicas: 1
template:
metadata:
labels:
app: meu-app
spec:
containers:
- name: meu-container
image: registry.nuvem.unicamp.br/bitnami/nginx
ports:
- containerPort: 8080
service-ingress.yaml
apiVersion: v1
kind: Service
metadata:
name: meu-app
spec:
selector:
app: meu-app
ports:
- name: http
port: 80
targetPort: 8080
type: ClusterIP
ingress.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: app-ingress
spec:
rules:
- host: meu-app.<IP_DO_INGRESS>.nuvem.unicamp.br
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: meu-app
port:
number: 80
Aplique os manifestos
kubectl apply -f deployment-ingress.yaml
kubectl apply -f service-ingress.yaml
kubectl apply -f ingress.yaml
Acesse a URL http://meu-app.<IP_DO_INGRESS>.nuvem.unicamp.br
Cert-Manager
Instalando o Cert-Manager
helm install cert-manager cert-manager \
--repo https://charts.jetstack.io \
--namespace cert-manager \
--create-namespace \
--set crds.enabled=true \
--version 1.17.2
Configurando o letsencrypt cluster-issuer.yaml
apiVersion: cert-manager.io/v1
kind: ClusterIssuer
metadata:
name: letsencrypt
spec:
acme:
server: https://acme-v02.api.letsencrypt.org/directory
email: <seu-email>@unicamp.br
privateKeySecretRef:
name: letsencrypt
solvers:
- http01:
ingress:
class: nginx
Aplique os manifestos
kubectl apply -f cluster-issuer.yaml
Alterando o ingress.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: app-ingress
annotations:
cert-manager.io/cluster-issuer: letsencrypt
spec:
tls:
- hosts:
- meu-app.<IP_DO_INGRESS>.nuvem.unicamp.br
secretName: meu-app-tls
rules:
- host: meu-app.<IP_DO_INGRESS>.nuvem.unicamp.br
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: meu-app
port:
number: 80
Acesse a URL https://meu-app.<IP_DO_INGRESS>.nuvem.unicamp.br e verifique se o certificado foi gerado corretamente
Projeto
Adicione um Ingress ao projeto, utilizando a URL https://projeto.<IP_DO_INGRESS>.nuvem.unicamp.br o certificado gerado pelo cert-manager utilizando letsencrypt.