Gatekeepers с Red Hat OpenShift или вышестоящим Kubernetes

Zusammenfassung: В этой статье базы знаний объясняется, как использовать репозиторий Red Hat GitHub kubevirt-rawio-addon для представления PowerMax Gatekeepers в среде Red Hat OpenShift или вышестоящей среде Kubernetes. ...

Dieser Artikel gilt für Dieser Artikel gilt nicht für Dieser Artikel ist nicht an ein bestimmtes Produkt gebunden. In diesem Artikel werden nicht alle Produktversionen aufgeführt.

Weisungen

Привратники PowerMax

Привратники PowerMax — это небольшие устройства (обычно три Мбайт), вырезанные из дисков в PowerMax, которые выступают в качестве целевых объектов SCSI для команд Solutions Enabler. Информация о конфигурации и состоянии сохраняется в файле базы данных хоста PowerMax symapi_db.bin по умолчанию. Она называется базой данных конфигурации PowerMax. Это сокращает количество запросов от хоста к массивам хранения данных. Гейткиперы должны быть сырыми устройствами, чтобы ОС просто передавала команды SCSI без манипуляций. Хотя физические хосты всегда работают со шлюзами (с поддерживаемой ОС), виртуальные хосты ограничены VMware, используя физические необработанные сопоставления устройств (RDM), гостевой iSCSI в Windows или Linux, гостевые NVMe/TCP в Linux или транзитные устройства (сетевая плата или HBA). Однако только VMware может предоставить по-настоящему сырое устройство, признанное жизнеспособным Gatekeeper. Другие решения виртуализации позволяют пользователю представлять устройства как «сырые», но их решения блокируют некоторые команды SCSI, препятствуя их использованию в качестве привратников. Solutions Enabler помечает их как Gatekeepers, но сообщает об ошибке, как показано ниже.

Кроме того, если вы исследуете Gatekeepers, они показывают состояние "CLS" или закрыто.

Поэтому вы не можете передать необходимые команды SCSI.

Чтобы воспользоваться преимуществами этого решения, необходимо использовать протокол, поддерживаемый Solutions Enabler в выбранной операционной системе. См. документацию по продукту.

Решение Red Hat GitHub

Компания Dell обратилась к Red Hat с просьбой о помощи в разработке временного решения для Gatekeepers в среде OpenShift для некоторых наших общих заказчиков. С этой целью они создали решение, которое работает как для OpenShift, так и для Upstream Kubernetes с небольшими вариациями в реализации. Репозиторий GitHub называется kubevirt-rawio-addon, как показано здесь: https://github.com/openshift-cnv/kubevirt-rawio-addon GitHub включает https://github.com/openshift-cnv/kubevirt-rawio-addon/blob/main/README.md readme.

Модуль устанавливает несколько компонентов:

  • Мутация вебхуков для изменения объектов «на лету»
  • Проверка веб-перехватчика — проверка безопасности для OpenShift
  • Конфигурация безопасности для предоставления привилегированных возможностей
  • Крюк для коляски 

Неполадка — это небольшой дополнительный контейнер, который выполняется вместе с модулем VM pod и изменяет низкоуровневую конфигурацию виртуальной машины перед ее запуском. Он перехватывает конфигурацию виртуальной машины, сгенерированную KubeVirt, находит аннотированные диски и устанавливает rawio=yes. Затем KubeVirt получает обратно XML. Базовая архитектура libvirt/QEMU поддерживает это, но не предоставляет его, поэтому требуется небольшая корректировка. Возможно, что KubeVirt предоставит это в будущем, и в этот момент обходной путь станет ненужным.


  

Реализация на OpenShift

Репозиторий содержит все инструкции по реализации этого решения. Поскольку Red Hat является собственником решения, Dell рекомендует следовать текущим инструкциям, которые могут быть изменены в будущем.  Dell не будет обновлять статью базы знаний, чтобы отразить эти изменения. В качестве любезности мы предоставляем основную информацию ниже, но рекомендуем пользователям этой статьи базы знаний использовать ее вместе с репозиторием.

Как уже отмечалось, это можно реализовать в OpenShift или Upstream Kubernetes. Как и в случае с OpenShift, есть несколько моментов, на которые следует обратить внимание при использовании Upstream Kubernetes.

  • Если вы реализуете на обычных K8s, у вас должен быть установлен cert-manager. Если установлен драйвер CSI PowerMax, он присутствует.
  • Если вы реализуете на ванильных K8s, вам потребуется привилегированное пространство имен. Вы можете использовать пространство имен в сценариях или создать собственное, а затем изменить сценарии.

Два скрипта, которые вам понадобятся для реализации, находятся в папке hack . rawio-setup.sh — это первый сценарий, одинаковый для обеих платформ, но имейте в виду, что он опирается на пространство имен openshift-cnv, которое присутствует только в OpenShift. Добавьте пространство имен или создайте новое и измените сценарий для K8s. Сценарий создания виртуальной машины уникален для платформы, но опять же использует пространство имен openshift-cnv. Для OpenShift это rawio-create-vm-openshift.sh. Сценарии предназначены для создания тестовой среды и потребуют модификации для настройки рабочей среды. В частности, сценарий rawio-setup.sh создает виртуальное устройство SCSI. Вместо этого измените сценарий, используя свой класс хранилища PowerMax. Кроме того, сценарий предполагает наличие одного узла для планирования виртуальной машины. Измените его, чтобы разрешить запуск на любом рабочем узле. Сценарий использует предварительную загрузку ОС Fedora.

Примеры сценариев приведены в разделе Дополнительные материалы.

Основные шаги

  • Клонируйте репозиторий: git clonehttps://github.com/openshift-cnv/kubevirt-rawio-addon.git
  • Установите манифест: oc apply -fhttps://github.com/openshift-cnv/kubevirt-rawio-addon/releases/download/v0.1.0/rawio-addon-openshift.yaml
  • Установите расширение: oc annotate –overwrite -n openshift-cnv hco kubevirt-hyperconverged kubevirt.kubevirt.io/jsonpatch='[{"op": "add", "path": "/spec/configuration/developerConfiguration/featureGates/-", "value": "Коляска"}]'
  • Запустите настройку: rawio-setup.sh
  • Создайте виртуальную машину. rawio-create-vm-openshift.sh 
  • Установите свою ОС (при условии, что вы не используете предварительно созданную)

Имейте в виду, что PowerMax CSI не может создать устройство меньше 50 Мбайт, даже если вы запросите традиционный Gatekeeper 3 Мбайт. Это не вызывает проблем.

Другие решения для виртуализации

Ни одно из приведенных ниже решений не работает с этим репозиторием Red Hat.

  • Решения на базе K8s, такие как SUSE Harvester - SUSE должны разработать свое собственное решение
  • KVM-решения, такие как Proxmox или Oracle KVM (oVirt) - они не основаны на KubeVirt и не могут быть использованы



 

Weitere Informationen

rawio-setup.sh

 

#!/bin/bash

 

set -euo pipefail

 

if [ -z "${KUBEVIRT_NAMESPACE:-}" ]; Затем
  Если kubectl получает ns openshift-cnv &>/dev/null; то
    NAMESPACE="openshift-cnv"
  Еще
    NAMESPACE="kubevirt"
  fi
Еще
  NAMESPACE="$KUBEVIRT_NAMESPACE"
fi

 

PVC_NAMESPACE="${PVC_NAMESPACE:-default}"
SC_NAME="powermax-2164-default"
PVC_NAME="scsi-rawio-pvc"

 

# Создать пространство имен, если оно не существует
kubectl get ns "$PVC_NAMESPACE" >/dev/null 2>&1 || kubectl create ns "$PVC_NAMESPACE"

 

# Создание PVC
echo "Создание PVC $PVC_NAME в пространстве имен $PVC_NAMESPACE..."

 

kubectl apply -f - <<EOF
Версия api: v1
Вид: PersistentVolumeClaim
Метаданных:
  name: $PVC_ИМЯ
  Пространства имен: $PVC_NAMESPACE
Миникаталог:
  storageClassName: $SC_ИМЯ
  volumeMode: Заблокировать
  accessModes:
    - ReadWriteOnce (ЧтениеWriteOnce)
  Ресурсы:
    Запросы:
      Хранения: 8Ми
EOF

 

echo ""
echo "=== Настройка завершена ==="
echo "StorageClass:   $SC_ИМЯ»
эхо "ПВХ:            $PVC_NAMESPACE/$PVC_NAME»
echo ""
 

*******************************************

rawio-create-vm-openshift.sh

 

#!/bin/bash

 

set -euo pipefail

 

PVC_NAMESPACE="${PVC_NAMESPACE:-default}"
PVC_NAME="${PVC_NAME:-scsi-rawio-pvc}"
VM_NAME="${VM_NAME:-rawio-test-vm}"
VM_SA="${VM_SA:-rawio-vm}"
CONTAINER_DISK="${CONTAINER_DISK:-quay.io/kubevirt/fedora-with-testtooling:v20240717-a087e7e}"
SCC_NAME="${SCC_NAME:-rawio-vm}"
KUBEVIRT_NAMESPACE="openshift-cnv"

 

echo "Создание ServiceAccount $VM_SA в пространстве имен $PVC_NAMESPACE"

 

kubectl apply -f - <<EOF
Версия api: v1
Вид: Сервисная учетная запись
Метаданных:
  name: $VM_SA
  Пространства имен: $PVC_NAMESPACE
EOF

 

echo "Создание SCC $SCC_NAME для сервисной учетной записи $VM_SA"

 

kubectl apply -f - <<EOF
apiВерсия: security.openshift.io/v1
Вид: Ограничения контекста безопасности
Метаданных:
  name: $SCC_ИМЯ
Приоритет: 11
allowPrivilegedContainer: false
allowHostDirVolumePlugin: true
allowHostNetwork: false.
allowHostPorts: false
allowHostPID: false
allowHostIPC: false
allowedCapabilities:
  - NET_BIND_SERVICE
  - SYS_NICE
  - SYS_RAWIO
  - SETFCAP
defaultAddCapabilities: []
seccompProfiles:
  - время выполнения/по умолчанию
  - Без ограничений
  - localhost/kubevirt/kubevirt.json
Объемы:
  - "*"
readOnlyRootFilesystem: false
runAsUser:
  type: RunAsAny
seLinuxContext:
  type: RunAsAny
fsGroup:
  type: RunAsAny
supplementalGroups:
  type: RunAsAny
Пользователей:
  - Система:СервисСчет:${PVC_NAMESPACE}:${VM_SA}
groups: []
EOF

 

echo "Создание виртуальной машины $VM_NAME в пространстве имен $PVC_NAMESPACE"
эхо "ПВХ:               $PVC_ИМЯ»
echo "ServiceAccount:    $VM_SA"
echo "Диск-контейнер:    $CONTAINER_ДИСК»

 

kubectl apply -f - <<EOF
apiВерсия: kubevirt.io/v1
Вид: Виртуальная машина
Метаданных:
  name: $VM_ИМЯ
  Пространства имен: $PVC_NAMESPACE
  Аннотации:
    kubevirt.io/rawioSupport: "Лунь0"
Миникаталог:
  Бег: true
  Шаблон:
    Метаданных:
      Аннотации:
        kubevirt.io/rawioSupport: "Лунь0"
    Миникаталог:
      Домена:
        Процессора:
          Ядер: 2
        Ресурсы:
          Запросы:
            Памяти: 2ГИ
        Устройств:
          Rng: {}
          Дисков:
            - имя: disk0
              Диск:
                Автобус: virtio
            - Имя: LUN0
              Lun:
                Шина: SCSI
            -Имя: $VM_SA
              Диск:
                Автобус: virtio
      Объемы:
        - имя: disk0
          containerDisk:
            Изображения: $CONTAINER_ДИСК
        - Имя: LUN0
          persistentVolumeClaim:
            claimName: $PVC_ИМЯ
        -Имя: $VM_SA
          serviceAccount:
            serviceAccountName: $VM_SA
EOF

 

echo ""
echo "Создана виртуальная машина $VM_NAME. Жду, когда он начнется...»
echo "Просмотр с помощью: kubectl get vmi -n $PVC_NAMESPACE $VM_NAME -w"
echo "Консоль:    virtctl console -n $PVC_NAMESPACE $VM_NAME"
echo ""
echo "Зачистка:"
echo " kubectl delete vm -n $PVC_NAMESPACE $VM_NAME"
echo " kubectl delete scc $SCC_NAME"

Betroffene Produkte

PowerMax, PowerMax, PowerMax 2000, PowerMax 2500, PowerMax 8000, PowerMax 8500, PowerMaxOS 10
Artikeleigenschaften
Artikelnummer: 000472526
Artikeltyp: How To
Zuletzt geändert: 03 Juni 2026
Version:  1
Antworten auf Ihre Fragen erhalten Sie von anderen Dell NutzerInnen
Support Services
Prüfen Sie, ob Ihr Gerät durch Support Services abgedeckt ist.