Atividade 05 - Network
Introdução
A partir dessa aula, sempre que encontrar um endereço com o sufixo curso-clusterXX.nuvem.unicamp.br, trocar o XX pelo número 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
Ingress Controller
Para utilizar o recurso Ingress, é necessário criar um Ingress Controller
Já existe um redirecionamento na Nuvem 2.0 para o ingress-nginx no worker01, portanto precisamos garantir que o ingress controller seja criado nesse nó.
Para isso vamos atribuir uma label ao worker01 (troque o XX pelo número do seu cluster)
kubectl label nodes clusterXX-worker01 ingress=sim
Agora vamos instalar o ingress-nginx
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 \
--set controller.nodeSelector.ingress=sim
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.curso-clusterXX.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.curso-clusterXX.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.curso-clusterXX.nuvem.unicamp.br
secretName: meu-app-tls
rules:
- host: meu-app.curso-clusterXX.nuvem.unicamp.br
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: meu-app
port:
number: 80
Acesse a URL https://meu-app.curso-clusterXX.nuvem.unicamp.br e verifique se o certificado foi gerado corretamente
Projeto
Adicione um Ingress ao projeto, utilizando a URL https://projeto.curso-clusterXX.nuvem.unicamp.br o certificado gerado pelo cert-manager utilizando letsencrypt.