Isolando Cargas de Trabalho com Namespaces

KubernetesBeginner
Pratique Agora

Introdução

O Kubernetes fornece namespaces como uma forma de isolar cargas de trabalho e recursos em um cluster. Neste laboratório, você aprenderá como usar namespaces para isolar cargas de trabalho e recursos. Você criará um namespace, implantará uma aplicação web simples no namespace e verificará se a aplicação web está isolada dos outros recursos no cluster.

Iniciar o Cluster Minikube

Antes de criar recursos, você precisa de um cluster Kubernetes em execução. Minikube é um ambiente Kubernetes leve que roda em sua máquina local.

  1. Navegue para o seu diretório de trabalho:

    Abra o terminal e navegue até a pasta do projeto padrão:

    cd /home/labex/project
    
  2. Inicie o Minikube:

    Inicie o Minikube para inicializar um cluster Kubernetes:

    minikube start
    
    • Este comando configura um cluster Kubernetes de nó único em sua máquina local.
    • O Minikube pode levar alguns minutos para iniciar, dependendo do desempenho do seu sistema.
  3. Verifique se o Minikube está em execução:

    Verifique o status do cluster Minikube:

    minikube status
    
    • Procure por componentes como kubelet e apiserver listados como Running.
    • Se o cluster não estiver em execução, execute novamente minikube start.

Se você encontrar problemas ao iniciar o Minikube. Use minikube delete para redefinir o ambiente, se necessário.

Criar um Namespace

Nesta etapa, você criará um namespace chamado webapp para isolar a aplicação web dos outros recursos no cluster.

Crie um arquivo chamado namespace.yaml com o seguinte conteúdo:

apiVersion: v1
kind: Namespace
metadata:
  name: webapp

Aplique o namespace ao seu cluster com o seguinte comando:

kubectl apply -f namespace.yaml

Verifique se o namespace foi criado com o seguinte comando:

kubectl get namespaces

Você deve ver o namespace webapp na lista de namespaces.

Implantar uma Aplicação Web

Nesta etapa, você implantará uma aplicação web simples no namespace webapp.

Crie um arquivo chamado web-app.yaml com o seguinte conteúdo:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: web-app
  namespace: webapp
spec:
  replicas: 1
  selector:
    matchLabels:
      app: web-app
  template:
    metadata:
      labels:
        app: web-app
    spec:
      containers:
        - name: nginx
          image: nginx:latest
          ports:
            - containerPort: 80

Este arquivo cria um Deployment com uma réplica de um container que executa a versão mais recente do servidor web Nginx.

Aplique o Deployment ao seu cluster com o seguinte comando:

kubectl apply -f web-app.yaml

Verifique se a aplicação web está em execução no namespace webapp com o seguinte comando:

kubectl get pods -n webapp

Você deve ver o pod web-app na lista de pods em execução no namespace webapp.

Expor a Aplicação Web

Nesta etapa, você irá expor a aplicação web ao mundo exterior usando um Kubernetes Service.

Crie um arquivo chamado web-app-service.yaml com o seguinte conteúdo:

apiVersion: v1
kind: Service
metadata:
  name: web-app
  namespace: webapp
spec:
  selector:
    app: web-app
  ports:
    - name: http
      port: 80
      targetPort: 80
  type: ClusterIP

Este arquivo cria um Service que expõe a aplicação web ao cluster usando um ClusterIP.

Aplique o Service ao seu cluster com o seguinte comando:

kubectl apply -f web-app-service.yaml

Verifique se o Service está em execução no namespace webapp com o seguinte comando:

kubectl get services -n webapp

Você deve ver o serviço web-app na lista de serviços em execução no namespace webapp.

Verificar o Isolamento do Namespace

Nesta etapa, você irá verificar se a aplicação web está isolada dos outros recursos no cluster.

Crie um arquivo chamado other-app.yaml com o seguinte conteúdo:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: other
spec:
  replicas: 1
  selector:
    matchLabels:
      app: other
  template:
    metadata:
      labels:
        app: other
    spec:
      containers:
        - name: nginx
          image: nginx
          ports:
            - containerPort: 80

Neste arquivo, você está criando outro Deployment chamado other no namespace padrão que executa um container com a imagem nginx.

Aplique o Deployment ao seu cluster com o seguinte comando:

kubectl apply -f other-app.yaml

Verifique se o Deployment está em execução no namespace padrão com o seguinte comando:

kubectl get pods | grep other

Você deve ver o pod other na lista de pods em execução no namespace padrão.

Verificando Acesso entre Namespaces

Primeiramente, encontre o nome do pod que está executando sua aplicação, executando o seguinte comando:

kubectl get pods -l app=other

Você deve ver o pod other. Anote o nome do pod.

Em seguida, execute o seguinte comando para abrir uma sessão de shell no container que está executando sua aplicação:

kubectl exec -it pod-name -- /bin/sh

Substitua pelo nome do pod que você anotou anteriormente.

Uma vez na sessão de shell, execute o seguinte comando para acessar o Deployment web-app:

curl web-app.webapp

Você deve ver a resposta HTML do servidor web Nginx.

Resumo

Neste laboratório, você aprendeu como usar namespaces para isolar cargas de trabalho e recursos em um cluster Kubernetes. Você criou um namespace, implantou uma aplicação web simples no namespace, expôs a aplicação web ao mundo exterior usando um Kubernetes Service e verificou que a aplicação web está isolada dos outros recursos no cluster.