Implantação do JumpServer no Kubernetes com Migracao de Dados

  1. Configuração Inicial

Esta seção detalha os procedimentos iniciais para preparar o ambiente de implantação.

1.1 Instalação do Helm

Baixe e configure o gerenciador de pacotes Helm no seu sistema.

curl -fsSL https://get.helm.sh/helm-v3.12.1-linux-amd64.tar.gz -o helm.tar.gz
tar -zxvf helm.tar.gz
mv linux-amd64/helm /usr/local/bin/helm
helm version
helm repo add jms-charts https://jumpserver.github.io/helm-charts
helm repo update

1.2 Resolução do GitHub

Para evitar problemas de rede, adicione a resolução de IP para o domínio do GitHub no arquivo /etc/hosts do seu nó de implantação.

140.82.113.3  github.com
  1. Implantação dos Serviços de Infraestrutura

2.1 Criação do Namespace

kubectl create namespace jumpserver

2.2 Proviisonamento do MySQL

Crie um PersistentVolumeClaim para armazenar os dados do banco de dados. Ajuste o storageClassName conforme seu provedor de nuvem.

cat <<eof accessmodes:="" apiversion:="" apply="" eof="" jumpserver="" kind:="" kubectl="" metadata:="" name:="" namespace:="" persistentvolumeclaim="" pvc-mysql-storage="" readwriteonce="" requests:="" resources:="" spec:="" storage:="" v1=""></eof>

Defina a configuração personalizada do MySQL via ConfigMap.

cat <<eof apiversion:="" apply="" cfg-mysql="" character-set-server="utf8mb4" collation-server="utf8mb4_general_ci" configmap="" custom.cnf:="" data:="" eof="" jumpserver="" kind:="" kubectl="" max_connections="1000" metadata:="" name:="" namespace:="" v1=""></eof>

Implante o Deployment do MySQL.

cat <<eof apiversion:="" app:="" apply="" apps="" cfg-mysql="" claimname:="" configmap:="" containerport:="" containers:="" custom.cnf="" db-storage="" deploy-mysql="" deployment="" env:="" eof="" image:="" jms-mysql="" jumpserver="" kind:="" kubectl="" labels:="" matchlabels:="" metadata:="" mountpath:="" mysql-config="" mysql-container="" mysql:5.7.42="" mysql_root_password="" name:="" namespace:="" persistentvolumeclaim:="" ports:="" pvc-mysql-storage="" selector:="" spec:="" subpath:="" template:="" value:="" volumemounts:="" volumes:=""></eof>

Exponha o serviço do MySQL internamente no cluster.

cat <<eof apiversion:="" app:="" apply="" clusterip="" eof="" jms-mysql="" jumpserver="" kind:="" kubectl="" metadata:="" name:="" namespace:="" port:="" ports:="" selector:="" service="" spec:="" svc-mysql="" targetport:="" type:="" v1=""></eof>

Após a implantação bem-sucedida, acesse o pod e crie o banco de dados do JumpServer.

kubectl exec -it deploy/deploy-mysql -n jumpserver -- mysql -u root -p -e "CREATE DATABASE IF NOT EXISTS jumpserver DEFAULT CHARSET utf8mb4 COLLATE utf8mb4_general_ci;"

2.3 Provisionamento do Redis

Provisione armazenamento persistente para o Redis.

cat <<eof accessmodes:="" apiversion:="" apply="" eof="" jumpserver="" kind:="" kubectl="" metadata:="" name:="" namespace:="" persistentvolumeclaim="" pvc-redis-storage="" readwriteonce="" requests:="" resources:="" spec:="" storage:="" v1=""></eof>

Crie a configuração do Redis.

cat <<eof apiversion:="" appendonly="" apply="" bind="" cfg-redis="" configmap="" data:="" eof="" jumpserver="" kind:="" kubectl="" metadata:="" name:="" namespace:="" port="" redis.conf:="" redissecurepassword="" requirepass="" save="" v1="" yes=""></eof>

Implante o Deployment do Redis.

cat <<eof apiversion:="" app:="" apply="" apps="" cfg-redis="" claimname:="" command:="" configmap:="" containerport:="" containers:="" deploy-redis="" deployment="" eof="" image:="" jms-redis="" jumpserver="" kind:="" kubectl="" labels:="" matchlabels:="" metadata:="" mountpath:="" name:="" namespace:="" persistentvolumeclaim:="" ports:="" pvc-redis-storage="" redis-config-volume="" redis-container="" redis-persist="" redis.conf="" redis:6.0.9="" selector:="" spec:="" subpath:="" template:="" volumemounts:="" volumes:=""></eof>

Crie o serviço do Redis.

cat <<eof apiversion:="" app:="" apply="" clusterip="" eof="" jms-redis="" jumpserver="" kind:="" kubectl="" metadata:="" name:="" namespace:="" port:="" ports:="" selector:="" service="" spec:="" svc-redis="" targetport:="" type:="" v1=""></eof>
  1. Configuração e Implantação do JumpServer

Baixe o arquivo values.yaml padrão do Helm Chart para personalização.

curl -fsSL https://raw.githubusercontent.com/jumpserver/helm-charts/main/charts/jumpserver/values.yaml -o jms-values.yaml

Edite o arquivo jms-values.yaml para definir os parâmetros essenciais: nome do StorageClass, credenciais de acesso aos bancos de dados (MySQL e Redis) e configurações de ingress. As demais opções podem ser ajustadas conforme necessidade.

Execute a instalação do JumpServer usando o Helm Chart.

helm install jumpserver-helm jms-charts/jumpserver -n jumpserver -f jms-values.yaml

Verifique se todos os pods foram iniciados corretamente.

kubectl get pods -n jumpserver -l app.kubernetes.io/instance=jumpserver-helm -w
  1. Verificação e Pós-Migração

Acesse a interface web do JumpServer através do host configurado no Ingress. O login inicial padrão é admin.

Para migrar dados de uma instância existente, utilize ferramentas como mysqldump ou serviços de migração de dados do seu provedor de nuvem para copiar os dados do banco de dados antigo para o novo banco de dados provisionado no Kubernetes.

Após a importação dos dados, reinicie todos os componentes do JumpServer para aplicar as alterações.

kubectl rollout restart deployment -l app.kubernetes.io/part-of=jumpserver -n jumpserver
  1. Solução de Problemas Comum

Erro: {"error":"service account registration disabled"}

Solução: Acesse a interface de administração do JumpServer, navegue até Configurações do Sistema > Configurações de Segurança e habilite o registro de terminais.

Se pods estiverem em estado de CrashLoopBackOff, reinicie-os individualmente.

kubectl delete pod -l app.kubernetes.io/name=jumpserver -n jumpserver

Tags: kubernetes Helm JumpServer MySQL Redis

Publicado em 7-11 19:02