Unicamp Kubernetes Service

A Nuvem 2.0 da Unicamp oferece suporte a Kubernetes, porém manter um cluster, gerenciar, e manter uma estrutura de Load Balancer, é custoso. Pensando nas Unidades que tem demanda pelo uso de Kubernetes, porém não justificam a adoção de um cluster inteiro exclusivo da Unidade, o Detic está oferecendo um cluster de Kubernetes compartilhado.

Solicitando acesso

Para aderir ao uso do cluster compartilhado, é necessário abrir uma solicitação no endereço: https://unicamp-agil.atlassian.net/servicedesk/customer/portal/16/group/84/create/236. Ao abrir a solicitação, por favor informe os seguintes campos:

  • Nome da Unidade

  • Projeto ou serviço que utilizará o cluster

  • Usuários da autenticação central das pessoas que administrarão os recursos do cluster

  • Requisição de Certificado para cada usuário do item acima (Enviar apenas o arquivo .csr. Guardar o arquivo .key que será utilizado para realizar o login do cluster, junto com o certificado que será gerado e enviado de volta pelo e-mail do chamado)

  • Quantidade de CPU e Memória necessária para rodar os recursos (Documentação de como Kubernetes trata esses recursos)

A requisição de certificado deve ser gerada conforme o comando abaixo, para cada usuário.

user=<meu_usuario_autenticacao_central> && openssl req -newkey rsa:2048 -nodes -keyout $user.key -out $user.csr -subj "/CN=$user"

Será enviado o certificado de cada usuário (<meu_usuario_autenticacao_central>.crt), o CA do kubernetes (kube-ca.crt) e o namespace criado.

Acessando o cluster

Para acessar o cluster, é necessário ter instalado o kubectl (disponível para Linux, MacOS e Windows) e executar os comandos abaixo.

export user=<meu_usuario_autenticacao_central>
kubectl config set-credentials uks-$user --embed-certs --client-certificate $user.crt --client-key $user.key
kubectl config set-cluster uks --embed-certs --certificate-authority kube-ca.crt --server https://177.220.120.104:6443
kubectl config set-context uks --cluster uks --user uks-$user --namespace <MEU_NAMESPACE>
kubectl config use-context uks

Obs: O nome da credencial, do cluster e do contexto são sugestões, pode ser adaptado conforme a necessidade de cada um.

Observações

Ingress

Não temos IPs disponíveis nesse ambiente, portanto o uso de Service do tipo LoadBalancer não funciona.

Para contornar essa indisponibilidade, está disponível um IngressController nginx configurado como default, portanto é possível utilizar Ingress para criar seu endpoint. O IP do IngressController é 177.220.120.107 e responde pelo nome uks.nuvem.unicamp.br. Deve-se criar um CNAME no DNS da Unidade apontando para o nome uks.nuvem.unicamp.br.

Caso queira fazer apenas testes, pode-se utilizar um subdomínio (1 nível) de uks.nuvem.unicamp.br que já está configurado com o CNAME, exemplo: meu-projeto.uks.nuvem.unicamp.br

Storage

Existe um serviço de NFS já configurado com StorageClass default.

Network Policies

É muito importante o uso de NetworkPolicies para proteger seus pods, pois, como o cluster é compartilhado, os serviços estão expostos no cluster inteiro.