Atividade 07 - Registry
Instalando o Harbor como registry do ambiente
helm install registry harbor \
--repo https://helm.goharbor.io \
-n registry --create-namespace \
--set service.type=ClusterIP \
--set externalURL=http://registry.<IP_DO_INGRESS>.nuvem.unicamp.br \
--set expose.ingress.hosts.core=registry.<IP_DO_INGRESS>.nuvem.unicamp.br \
--set expose.ingress.annotations."cert-manager\.io/cluster-issuer"=letsencrypt \
--set harborAdminPassword="batata"
Acesse http://registry.<IP_DO_INGRESS>.nuvem.unicamp.br e logue com usuário admin e senha batata
Acesse Administração -> Configuração -> Configurações do Sistema
Altere o Prefixo para contas de automação para robot@
Acesse o dashboard para gerenciamento dos repositórios
Crie um projeto com nome curso, marque como publico e coloque 10GB de quota no projeto
Dentro do projeto, crie uma conta de robo, e efetue login no harbor pelo docker
docker login registry.<IP_DO_INGRESS>.nuvem.unicamp.br -u <usuario-robo> -p <senha>
Crie um arquivo index.html com o conteúdo:
<html>
<body>
<h1>Hello World</h1>
</body>
</html>
Utilize o seguinte Dockerfile
FROM registry.nuvem.unicamp.br/curso-kubernetes/nginx
COPY index.html /usr/share/nginx/html/index.html
Build a imagem e push para o harbor
docker build . -t registry.<IP_DO_INGRESS>.nuvem.unicamp.br/curso/webserver
docker push registry.<IP_DO_INGRESS>.nuvem.unicamp.br/curso/webserver
Crie um arquivo deploy-pelo-registry.yaml com o seguinte conteúdo:
apiVersion: apps/v1
kind: Deployment
metadata:
name: webserver
spec:
replicas: 1
selector:
matchLabels:
app: webserver
template:
metadata:
labels:
app: webserver
spec:
containers:
- name: webserver
image: registry.<IP_DO_INGRESS>.nuvem.unicamp.br/curso/webserver
ports:
- containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
name: webserver
spec:
type: ClusterIP
selector:
app: webserver
ports:
- protocol: TCP
port: 80
targetPort: 80
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: webserver
annotations:
cert-manager.io/cluster-issuer: letsencrypt
spec:
tls:
- hosts:
- webserver.<IP_DO_INGRESS>.nuvem.unicamp.br
secretName: webserver-tls
rules:
- host: webserver.<IP_DO_INGRESS>.nuvem.unicamp.br
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: webserver
port:
number: 80
Aplique o deploy:
kubectl apply -f deploy-pelo-registry.yaml
Crie outro projeto chamado curso-privado, marque como privado e coloque 10GB de quota no projeto
Dentro do projeto, crie uma conta de robo, e efetue login no harbor pelo docker
docker login registry.<IP_DO_INGRESS>.nuvem.unicamp.br -u <usuario-robo> -p <senha>
Taguei a imagem criada no novo repositorio
docker tag registry.<IP_DO_INGRESS>.nuvem.unicamp.br/curso/webserver registry.<IP_DO_INGRESS>.nuvem.unicamp.br/curso-privado/webserver
docker push registry.<IP_DO_INGRESS>.nuvem.unicamp.br/curso-privado/webserver
Crie um deploy com o mesmo conteúdo do deploy anterior, mas utilizando a imagem do novo repositorio
Adicione um arquivo secret-dockerconfig.yaml com o secret de dockerconfig com o seguinte conteudo:
apiVersion: v1
kind: Secret
metadata:
name: registry-auth
type: kubernetes.io/dockerconfigjson
data:
.dockerconfigjson: <base64 do arquivo .dockerconfigjson>
Obs: O arquivo .dockerconfigjson fica em $HOME/.docker/config.json, para gerar o base64 use o seguinte comando:
cat $HOME/.docker/config.json | base64 -w 0
Alternativamente, você pode gerar o yaml desse secret utilizando o seguinte abaixo:
kubectl create secret docker-registry registry-auth \
--docker-server=registry.<IP_DO_INGRESS>.nuvem.unicamp.br \
--docker-username=<usuario-robo> \
--docker-password=<senha> \
--docker-email=<email> \
--dry-run=client -o yaml > secret-dockerconfig.yaml
Aplique o secret:
kubectl apply -f secret-dockerconfig.yaml
Crie um arquivo deploy-pelo-registry-privado.yaml com o seguinte conteúdo:
apiVersion: apps/v1
kind: Deployment
metadata:
name: webserver-privado
spec:
replicas: 1
selector:
matchLabels:
app: webserver-privado
template:
metadata:
labels:
app: webserver-privado
spec:
imagePullSecrets:
- name: registry-auth
containers:
- name: webserver
image: registry.<IP_DO_INGRESS>.nuvem.unicamp.br/curso-privado/webserver
ports:
- containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
name: webserver-privado
spec:
type: ClusterIP
selector:
app: webserver-privado
ports:
- protocol: TCP
port: 80
targetPort: 80
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: webserver-privado
annotations:
cert-manager.io/cluster-issuer: letsencrypt
spec:
tls:
- hosts:
- webserver-privado.<IP_DO_INGRESS>.nuvem.unicamp.br
secretName: webserver-privado-tls
rules:
- host: webserver-privado.<IP_DO_INGRESS>.nuvem.unicamp.br
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: webserver-privado
port:
number: 80
Aplique o deploy:
kubectl apply -f deploy-pelo-registry-privado.yaml
Projeto
Criei um projeto no seu harbor e faça um docker push da imagem da aplicação python no seu registry.