Изоляция рабочих нагрузок с использованием пространств имен (namespace)

KubernetesBeginner
Практиковаться сейчас

Введение

Kubernetes предоставляет пространства имен (namespaces) как способ изолировать рабочие нагрузки и ресурсы в кластере. В этом практическом занятии (lab) вы узнаете, как использовать пространства имен для изоляции рабочих нагрузок и ресурсов. Вы создадите пространство имен, развернете простое веб-приложение в этом пространстве имен и убедитесь, что веб-приложение изолировано от других ресурсов в кластере.

Запустите кластер Minikube

Перед созданием ресурсов вам нужен работающий кластер Kubernetes. Minikube - это легковесная среда Kubernetes, которая запускается на вашем локальном компьютере.

  1. Перейдите в рабочую директорию:

    Откройте терминал и перейдите в папку проекта по умолчанию:

    cd /home/labex/project
    
  2. Запустите Minikube:

    Запустите Minikube для инициализации кластера Kubernetes:

    minikube start
    
    • Эта команда настраивает однодневный кластер Kubernetes на вашем локальном компьютере.
    • В зависимости от производительности вашей системы Minikube может потребовать несколько минут для запуска.
  3. Проверьте, что Minikube запущен:

    Проверьте статус кластера Minikube:

    minikube status
    
    • Найдите компоненты, такие как kubelet и apiserver, перечисленные как Running.
    • Если кластер не запущен, запустите команду minikube start снова.

Если у вас возникли проблемы при запуске Minikube, используйте minikube delete для сброса среды при необходимости.

Создание пространства имен (namespace)

На этом шаге вы создадите пространство имен с именем webapp, чтобы изолировать веб-приложение от других ресурсов в кластере.

Создайте файл с именем namespace.yaml со следующим содержимым:

apiVersion: v1
kind: Namespace
metadata:
  name: webapp

Примените пространство имен к вашему кластеру с помощью следующей команды:

kubectl apply -f namespace.yaml

Проверьте, что пространство имен было создано, с помощью следующей команды:

kubectl get namespaces

Вы должны увидеть пространство имен webapp в списке пространств имен.

Развертывание веб-приложения

На этом шаге вы развернете простое веб-приложение в пространстве имен (namespace) webapp.

Создайте файл с именем web-app.yaml со следующим содержимым:

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

Этот файл создает развертывание (Deployment) с одним экземпляром контейнера, который запускает последнюю версию веб-сервера Nginx.

Примените развертывание к вашему кластеру с помощью следующей команды:

kubectl apply -f web-app.yaml

Проверьте, что веб-приложение запущено в пространстве имен webapp с помощью следующей команды:

kubectl get pods -n webapp

Вы должны увидеть под (pod) web-app в списке подов, запущенных в пространстве имен webapp.

Размещение веб-приложения в доступной сети

На этом шаге вы сделаете веб-приложение доступным извне с помощью сервиса (Service) Kubernetes.

Создайте файл с именем web-app-service.yaml со следующим содержимым:

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

Этот файл создает сервис, который делает веб-приложение доступным в кластере с использованием ClusterIP.

Примените сервис к вашему кластеру с помощью следующей команды:

kubectl apply -f web-app-service.yaml

Проверьте, что сервис запущен в пространстве имен webapp с помощью следующей команды:

kubectl get services -n webapp

Вы должны увидеть сервис web-app в списке сервисов, запущенных в пространстве имен webapp.

Проверка изоляции пространства имен (namespace)

На этом шаге вы убедитесь, что веб-приложение изолировано от других ресурсов в кластере.

Создайте файл с именем other-app.yaml со следующим содержимым:

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

В этом файле вы создаете другое развертывание (Deployment) с именем other в пространстве имен по умолчанию, которое запускает контейнер с образом nginx.

Примените развертывание к вашему кластеру с помощью следующей команды:

kubectl apply -f other-app.yaml

Проверьте, что развертывание запущено в пространстве имен по умолчанию с помощью следующей команды:

kubectl get pods | grep other

Вы должны увидеть под (pod) other в списке подов, запущенных в пространстве имен по умолчанию.

Проверка доступа между пространствами имен (namespace)

Сначала найдите имя пода (pod), на котором запущено ваше приложение, выполнив следующую команду:

kubectl get pods -l app=other

Вы должны увидеть под (pod) с именем other. Запомните имя пода.

Затем выполните следующую команду, чтобы открыть сессию оболочки в контейнере, на котором запущено ваше приложение:

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

Замените <pod-name> на имя пода, которое вы запомнили ранее.

После того, как вы окажетесь в сессии оболочки, выполните следующую команду, чтобы получить доступ к Deployment web-app:

curl web-app.webapp

Вы должны увидеть HTML-ответ от веб-сервера Nginx.

Резюме

В этом практическом занятии вы узнали, как использовать пространства имен (namespace) для изоляции рабочих нагрузок и ресурсов в кластере Kubernetes. Вы создали пространство имен, развернули простое веб-приложение в этом пространстве имен, сделали веб-приложение доступным извне с помощью сервиса (Service) Kubernetes и убедились, что веб-приложение изолировано от других ресурсов в кластере.