Рубрики
Uncategorized

Глубокое погружение с предоставлением AKS RBAC включила кластер Kubernetes с использованием террафора.

В этом длинном описательном посте в блоге, где мы бы поняли, что такое инфраструктура код. Понимание … Помечено террафом, дежоптом, Куберане, Лазури.

В этом длинном описательном посте в блоге, где мы бы поняли, что такое инфраструктура код. Понимание того, что, почему, и как позади ** Terraform ** и как положения простой RBAC с поддержкой Azure Kubernetes Service (AKS) кластер с использованием террафора.

Что такое террафор, в любом случае?

Terraform — это открытый источник, кроссплатформенная инфраструктура в качестве кода, (IAAC) программного инструмента, который предоставляется Hashicorp, который доступен на Windows, Linux, Mac и другой ОС. Terraform предоставляет лучший способ обеспечить инфраструктуру на различных платформах и облачных провайдерах с помощью файла конфигурации (Main.tf). Terraform использует язык конфигурации высокого уровня, называемый HCl (язык конфигурации Hashicorp), который является более читаемым человеком и легко понять.

Таким образом, простые слова, вместо того, чтобы вручную настроить инфраструктуру, которая включает в себя точку и щелчок через пользовательский интерфейс для предоставления виртуальных машин, хранения, сетей и других ресурсов на различных облачных поставщиков, таких как (AWS, Azure, Google Cloud). Мы можем автоматизировать , Версия для управления Та же задача для обеспечения инфраструктуры с помощью террафора. Наряду со всеми добром, которую может предложить террафору, это также рефераты базовая сложность при обеспечении инфраструктуры.

Представьте себе жизнь без инфраструктуры как код

Предположим, если вам дали задачу для предоставления виртуальной машины на Azure, она включает в себя.

  1. Откройте свой любимый браузер (Chrome для меня!)

  2. Перейти к Portal.azure.com

  3. Перейдите на страницу виртуальной машины.

  4. Укажите имя, а затем Выберите тип, а затем Нажмите и Нажмите ** и ** Нажмите Как вы настраиваете его и подождите, пока он не будет создан. Звук просто не так ли?

Теперь представьте себе одинаковую задачу, но вращается до 100 виртуальной машины, что включает в себя одну и ту же задачу по всему и снова, * Нажмите Нажмите кнопку … ** Sound Simple Разве не так ли? Но разве это не слишком много. *(Раздражающий)

Так, Почему инфраструктура как код, то?

Ниже приведены пара причин для выбора инфраструктуры в качестве кода против традиционной точки и нажмите.

  • Интеграция лучшие практики и стандарты, поскольку инфраструктура хранится как код.

  • ** Управление версиями ** помогает постепенно, внедрить и обеспечить инфраструктуру, также с возможностью откатиться к определенной версии, если это необходимо.

  • Помогает задачу создания, масштабирования и удаления быть легко Автоматизированный Отказ

  • ** Отслеживание ** Изменения в качестве инфраструктуры — это контролируемая версия.

  • ** Воспроизведение, ** Как код, а также файлы конфигурации, могут быть позже повторно использованы и совместно среди команд.

Сейчас мы поняли доброту, что инфраструктура в качестве кода может предложить, давайте быстро получить обзор того, как мы создадим кластер Aks с использованием террафора.

Просто обзор.

Давайте обсудим общий поток, оказания AX с использованием террафора.

  • Аутентификация Terraform для Azure:

Первоначально мы будем создавать руководитель обслуживания в Azure и предоставлять свои учетные данные Terraform для аутентификации на Azure.

  • Связь с Azure API:

После успешного аутентификации для Azure с использованием предоставленных учетных данных Terraform будет связываться с менеджером ресурсов Azure и отправлять запросы на предоставление ресурса на Azure.

  • Azure Provisioning Ресурс:

Azure или любой облачный поставщик по этому вопросу, основанный на запросе ресурсов, проверяет доступность ресурса А, а затем положения запрашиваемого ресурса. Лазурь на заднем плане делает большую часть тяжелой подъема и скрывает основную сложность.

Предпосылки.

  1. Терраформ CLI.

  2. Azure Account

  3. Текстовый редактор (необязательно)

  4. Azure CLI (необязательно)

— Вы можете пропустить этот раздел, если у вас уже есть Terraporm, Text-Editor, Azure-CLI, установленный на вашем компьютере.

Установка террафора.

Terraform — это очень простой исполняемый файл командной строки, которая доступна на всех основных платформах, таких как Windows, Linux и MacOS, а также OpenBSD и Solaris.

Теперь мы бы быстро настроили террафору в среде Windows в 3 простых шагах.

  1. Скачать исполняемый файл террафора из Официальный сайт и извлечь исполняемый файл.

  2. Создайте папку под C:/Drive или любой диск для этого и назовите папку как террафору и переместите TerrAform.exe в эту папку.

  3. Добавьте полный путь папки, которая теперь содержит террафору в моем случае, это C:/Terraform /В средах переменных. Это можно сделать, набрав sysdm.cpl * в бегах, а затем навигации к * Advanced вкладка, а затем нажав на Переменные среды.

Для проверки, если террафом успешно установлен, мы можем открыть командную строку и ввести Террафом -Верс , если все прошло хорошо, вы должны отображать версию Terraform.

Выбор текстового редактора (необязательно)

Загрузка стороннего текстового редактора полностью необязательна для этого, как вы также можете использовать Блокнот, Vim Что было бы совершенно хорошо, но для легкой и кучей других функций я предпочитаю использовать Visual Studio Code. Вы можете скачать и установить Visual Studio Code из этого официальная ссылка .

После загрузки и установки визуального студийного кода вы можете установить Расширение террафора который помогает во многих отношениях, таких как синтаксис, подсвечивающий, проживание, форматирование, проверка и автоматическое завершение.

Все файлы, представленные в этой демонстрации, размещены на репозитории GitHub. https://github.com/chrisedrego/aks_terraform

Установка Azure CLI.

Azure CLI доступен на всех основных операционных системах, включая Windows, MacOS и Linux. Пожалуйста, обратитесь к официальному ссылка для скачивания.

Аутентификация для Azure с использованием террафора.

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

Поскольку мы сосредотачиваемся на Azure в качестве поставщика облака, давайте понять различные способы, которыми мы можем аутентифицироваться на Azure с использованием террафора.

  1. Аутентификация с помощью Azure-CLI

  2. Аутентификация с использованием управляемой идентичности службы

  3. Аутентификация с использованием руководителя обслуживания

На данный момент мы будем аутентифицировать на Azure, используя руководитель обслуживания, до того, как давайте понять то, что является директором обслуживания.

Что такое руководитель службы?

Директор по обслуживанию — это идентификация безопасности, которая имеет определенные роли, разрешение назначена ему доступа к конкретным ресурсам Azure.

Почему нам нужен директор услуг?

Когда принцип службы создан, он генерирует учетные данные, которые используются приложениями для аутентификации на Azure и доступа к ресурсам на основе облаков на Azure. В этом примере принципал службы будет использоваться террафой для аутентификации на Azure.

Два способа создания руководителя услуг

Azure Portal Azure CLI

Создание принципала службы с помощью Azure (портал)

Перед созданием руководителя услуг нам необходимо убедиться, что мы предоставляем, просто необходимый адекватный объем разрешения. Предоставление руководителя услуг гораздо более высокое количество ресурсов, то, что ожидается, что ожидается, выставляет систему в уязвимость и тем самым уменьшается общая безопасность и безопасность.

Шаг 1: Войдите в свой Azure Portal И в поисковом строке введите * «Регистрация приложений» *, а затем отправляйтесь на страницу регистрации приложений.

Шаг 2: ** Нажмите на ** Новые регистрации После чего у вас будет страница, которую запрашивает имя приложения, поддерживаемые типы учетных записей, а также Redirect URL.

Укажите уникальное название приложения, за которым необходимо предоставить URL-адрес перенаправления (необязательно). URL-адрес перенаправления также могут быть установлены на * http://localhost * или любое допустимое доменное имя, которое имеет HTTPS.

После создания принципала службы существует больше его, так как нам нужно настроить необходимые необходимые разрешения, а также захватить учетные данные, необходимые для аутентификации.

В этом случае нам необходимо принять к сведению приложение (Client_id), каталог (Tenant_id), а затем отправляется на Вкладка сертификата и секретов получить доступ к секретам.

После захвата держателя client_id, client_secret & tenant_id Отправляйтесь на страницу подписки на Azure и получите ** id подписки **, который также понадобится.

Добавление ролей/разрешение на руководитель обслуживания

После успешного создания руководителя службы для террафора нам необходимо убедиться, что мы присваиваем требование основных конкретных ролей службы, которые позволят террафом обеспечить запрошенные ресурсы.

Мы можем обеспечить роли к директору службы для всей подписки или только к конкретной группе ресурсов, а ниже я приложил скриншот, чтобы пойти как с подходами.

  1. Добавление доступа доступа к руководителю услуг на уровне подписки.
  1. Добавление доступа доступа к принципу обслуживания на конкретном уровне групповой группы ресурсов.

Создание и назначение ролей к руководителю услуг (Azure CLI)

(Вы можете пропустить этот шаг, если вы уже использовали вышеуказанный подход с помощью Azure Portal)

Я упомянул подобные шаги, но используя пользовательский интерфейс Azure Portal ниже, вы можете пропустить этот шаг, если на вашем компьютере не будет установлен Azure CLI.

  1. Войдите в Azure, используя Azure Cli.

az login.

  1. После аутентификации для Azure выберите определенную подписку IT, если у вас есть много, вы можете просматривать свой идентификатор подписки с помощью справки

Список аккаунтов AZ

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

Набор аккаунтов AZ —subscription «Подписка_id»

  1. Теперь после переключения аккаунта подписки на вашу машину мы можем создавать и назначить доступу принципиального участника услуг для подписки

$ az ad sp create-for-rbac

После чего сейчас он выводит JSON, которая содержит клиенту, TenantID, пароль

{ «APPID»: «00000000-0000-0000-0000-00000000000000», «DisplayName»: «Azure-Cli-XXX», «Имя»: « http://Azure-Cli-XXX », «Пароль»: «0000-0000-0000-0000-00000000000000», «Арендатор»: «00000000-0000-0000-0000-0000000000000000-00000000000000» }

Когда у нас теперь есть директор Service, созданный с ролью доступа к участнику вместе с его Client_id, Client_Secret/Password, Tenant_ID и подпиской_ид, который мы будем использовать в Terraform, поэтому теперь мы все начнут начать (террафом)

Теперь давайте начнем Террафор

Весь код, упомянутый здесь присутствует на моем Репозиторий GitHub Отказ

С целью простоты мы просто создали бы папку с именем AKS-Basic, которая будет иметь три файла, давайте иметь базовое понимание всех этих файлов.

  1. main.tf (конфигурация)

  2. variables.tf (переменные)

  3. Выходы .tf (вывод)

** Main.tf: ** содержит детали поставщика облака и ресурс, который должен быть предоставлен на указанном облачном провайдере.

variables.tf — Содержит список переменных и значения, которые ссылаются внутри файла main.tf.

* выходы. TF * — Содержит значение, которое будет возвращено/выводить после успешного обеспечения инфраструктуры, которая может быть позже использована другими модулями.

Вы можете рассмотреть модули в террафоре в качестве функции, которая представляет собой комбинацию (Main.tf + variables.tf + athnats.tf), которая находится в том, где Main.tf является телом функции, которая имеет определенную работу, когда в качестве переменных Входные данные для Main.tf, которые передаются на функции, в качестве окончательного результирующего окончательного вывода. Выходные данные. M. можно рассматривать как возвращаемое значение, которое возвращает модуль.

main.tf

provider "azurerm" {

# Azure Provider version (Optional)

version = "=1.34.0″

# Credentials are specified authenticating to Azure

client_id = "${var.client_id}"

client_secret = "${var.client_secret}"

tenant_id = "${var.tenant_id}"

subscription_id = "${var.subscription_id}"

}

resource"azurerm_resource_group" "rg"{

name = "${var.resource_group_name}"

location = "${var.resource_group_location}"

}

resource"azurerm_kubernetes_cluster" "testcluster"{

name = "${var.cluster_name}"

location = "${var.resource_group_location}"

resource_group_name = "${azurerm_resource_group.rg.name}"

dns_prefix = "dns"

agent_pool_profile {

name = "agentpool"

count = 3

vm_size = "Standard_B2ms"

}

service_principal {

# Specifying a Service Principal for AKS Cluster

client_id = "${var.client_id}"

client_secret = "${var.client_secret}"

}

# Tag's for AKS Cluster's environment along with  nclustername

tags = {

environment = "test"

cluster_name = "${var.cluster_name}"

}

# Enable Role Based Access Control

role_based_access_control {

enabled = true

}

}

Ломаться, Main.tf.

В этом случае давайте понять Main.tf, чтобы лучше понять, что происходит на заднем плане.

Блок поставщика

provider "azurerm" {

version = "1.28.0"

client_id = "${var.client_id}"

client_secret = "${var.client_secret}"

tenant_id = "${var.tenant_id}"

subscription_id = "${var.subscription_id}"

}

Как мы уже знаем, что террафору можно использовать для обеспечения облачных ресурсов на нескольких облачных поставщиков, таких как AWS, Azure, GCP, Heroku. Поставщик несет ответственность за понимание взаимодействий API и обнажив ресурсы. Поставщик входит в изображение на самом начальном этапе во время взаимодействия с облачным провайдером (Azure), как вы можете вызвать его как точку записи, чтобы решить, какой поставщик облака мы будем обеспечивать ресурсы. Чтобы понять больше о различных облачных провайдерах, которые террафом должен предложить обратиться к официальному ссылка на сайт

В этом блоке мы внимательно следили, мы указываем поставщик менеджера ресурсов Azure Azure Azure (Arurerm) наряду с учетными далее с учетными данными к учетным данным с помощью администрации службы для аутентификации на Azure.

Azure_rm_kubernetes_Cluster.

resource"azurerm_resource_group" "rg"{

# Name/Location of the Resource Group in which the

AKS cluster will be created.

name = "${var.resource_group_name}"

location = "${var.resource_group_location}"

}

resource"azurerm_kubernetes_cluster" "testcluster"{

name = "${var.cluster_name}"

location = "${var.resource_group_location}"

resource_group_name = "${azurerm_resource_group.rg.name}"

dns_prefix = "-dns"

agent_pool_profile {

name = "agentpool"

count = 3

vm_size = "Standard_B2ms"

os_type = "Linux"

os_disk_size_gb = 100

}

service_principal {

client_id = "${var.client_id}"

client_secret = "${var.client_secret}"

}

tags = {

environment = "test"

cluster_name = "${var.cluster_name}"

}

role_based_access_control {

enabled = true

}

}

* Azurerm_Kubernetes_Cluster * Block используется для определения общей конфигурации, необходимой для спина, который необходимо вкрутить кластер Kubernetes, в этом случае мы не будем настраивать высокосоведочные кластеры Kubernetes со всеми указанными подсетью и другими сетевыми деталями, чтобы узнать больше о том, как высоко Настройка кластера Kubernetes Обратитесь к официальному ссылка на сайт

Имя & Расположение Как мы знаем, указывает имя и местоположение, где будет создан кластер AKS.

Resource_Group_name Относится к вышеуказанному блоку указанного имени группы ресурсов.

dns_prefix Это префикс DNS, который будет использоваться для API-сервера кластера AKS. В нашем случае мы указали его как DNS, которые дополнительно содержат уникальное доменное имя. Который будет составлять уникальную конечную точку, которая представляет сервер API для кластера AKS.

Пример: dns-3xmxa.hcp.astus.azmk8s.io

** aggent_pool_prefix ** содержит много подробной информации о Nitty-Gritty Details о типе и подсчете виртуальных машин, которые будут использоваться вместе с размером диска и ОС, установленные на них.

** Теги ** являются необязательным объектом, но оказаться полезным тегом или ресурсом метки на Azure, который выполняет определенную работу.

** ROLE_BASED_ACCESS_CONTROL ** A установлен включен, что гарантирует, что кластер Kubernetes будет включен RBAC.

Группа ресурсов

resource "azurerm_resource_group" "rg" {

name = "${var.resource_group_name}"

location = "${var.resource_group_location}"

}

Ресурсная группа в Azure используется для логической группы ресурсов в Azure. Поскольку мы обеспечиваем кластер AKS в Azure, мы предоставляем группу ресурсов, в которой будет создан кластер.

variables.tf

variable "client_id" {

description = "contains the Client Id for service principal"

client_id = "XXXXX-XXXX-XXXXX-XXXXX"

}

variable "client_secret" {

description = "contains the Client Secret for service principal"

client_id = "XXXXX-XXXX-XXXXX-XXXXX"

}


variable "tenant_id" {

description = "contains the Tenant Id for service principal"

client_id = "XXXXX-XXXX-XXXXX-XXXXX"

}


variable "subscription_id" {

description = "contains the Subscription Id for service principal"

client_id = "XXXXX-XXXX-XXXXX-XXXXX"

}


variable "resource_group_name" {

description = "contains the name of the Resource Group"

default = "test_rg"

}


variable "resource_group_location" {

description = "contains the location Resource Group of cluster"

default = "XXXXX"

}

variable "cluster_name" {

description = "contains AKS Cluster Name"

default = "XXXXX"

}

Мы посмотрели рядом с Main.tf, мы не указали большую часть значений жесткозедированных, скорее все их относятся к VAR, а затем имя переменных, все эти переменные указаны в этих вариантах .TF.

Пожалуйста, обратите внимание, что его не рекомендуется подход к хранению секретов/учетных данных в простом тексте ** Переменные.tf * * Файл, вы можете хранить эти переменные в переменных среда, если в случае среды CI/CD как секрета, чтобы избежать воздействия и тем самым препятствовать безопасности.

Теперь после понимания Nitty-Gritty деталей о том, что является Main.tf и variables.tf, давайте узнаем, как планировать и применить конфигурацию, присутствующую в Main.tf на Azure.

Терраформ: этапы

Давайте быстро понять, что может предложить каждая фаза, поскольку мы будем реализовать то же самое, пока мы обеспечим кластер Aks.

Terraform init Используется для инициализации текущего модуля или папки, в котором мы находимся в том числе, в которой мы находимся Main.tf, и если есть любой блок-блока облачного провайдера, определенный внутри main.tf в текущем каталоге, в котором запущена команда Terraform init, она идет вперед и Загрузите бинарную необходимость для связи с API в конкретном поставщике облака.

План террафора Делает отличную работу по мере того, как она аутентифицируется в облачный провайдер, а затем предоставляет сводку того, что будут изменения, которые будут применяться после применения конфигурации, присутствующей в Main.tf

Террафом применяется После запуска плана террафора после того, как мы поняли, что необходимы предложенные изменения, теперь мы можем запустить применение Terraform, которое идет впереди и начнет обеспечивать инфраструктуру с нашим одобрением.

Террафору уничтожить, После успешного обеспечения ресурса на облачных провайдерах, если мы хотим уничтожить изменения, мы можем запустить разрушение террафора, которое идет вперед и разрушает ресурсы.

Давайте понять каждый этап немного деталей здесь.

Терраформ: Инигия

Нам нужно перейти к модулю/каталогу, который содержит код (Main.tf), после чего вам нужно запустить init Terraform init.

Какая магия делает Terraform init?

Когда мы запустим Terrasororm init, он инициализирует, если в Main.tf также есть внешний модуль, указанный в Main.tf, если блок провайдера объявлен, он проходит вперед и загружает двоичные файлы, необходимые для будущей связи с конкретным поставщиком облака. В этом случае, если мы запустим INIT TERRAFORM INIT, он идет вперед и загружает двоичные файлы Azure внутри каталога .terraform, этот двоичный файл полезен для связи с ACURE API.

Output after running: terraform init 
Initializing the backend... 
Initializing provider plugins... 
Terraform has been successfully initialized! 
You may now begin working with Terraform. Try running "terraform plan" to see any changes that are required for your infrastructure. All Terraform commands should now work. 
If you ever set or change modules or backend configuration for Terraform, rerun this command to reinitialize your working directory. If you forget, other commands will detect it and remind you to do so if necessary.

Террафом: ПЛАН

Когда вы запускаете командный план террафора, он продолжается и дает нам обзор, о том, как будет выглядеть инфраструктура после применения конфигурации, которая должна быть предоставлена. Результирующий выход из плана террафора часто перечисляет ресурсы, которые либо будут созданы (+), удалены (-) или модифицированы (+/-).

План Terraporm можно сравнить с командой Linux Diff (+) (-) (~)

План выполнения был сгенерирован и показан ниже.

Действия ресурсов указаны следующими символами:

+ create

Terraform will perform the following actions:

# azurerm_kubernetes_cluster.testcluster will be created

+ resource "azurerm_kubernetes_cluster" "testcluster" {

+ dns_prefix = "dns"

+ resource_group_name = "TEST"

+ "environment" = "test"

}

+ addon_profile {

+ aci_connector_linux {

+ enabled = (known after apply)

}

+ http_application_routing {

+ enabled =

(known after apply)

}

........

........

+ service_principal {

+ client_id = "92409b6a-00eb-40f7–9af6–16faef7206c8″

+ client_secret = (sensitive value)

}

}
# azurerm_resource_group.rg will be created

+ resource "azurerm_resource_group" "rg" {id = (known after apply)}
Plan: 2 to add, 0 to change, 0 to destroy.

— — — — — — — — — — — — — — — — — — — — — — — — — — — — —

Если мы должны посмотреть тщательно, Terraform дает нам полный обзор того, как будут применяться изменения (+), означает, что будут добавлены конкретные ресурсы, это неактуально помогает нам, когда не хочет напрямую применить изменения, а скорее хотели бы видеть Какие изменения произойдут и основаны на выходе, если кажется подходящим, мы тогда идут вперед и применяем план.

Террафом применяется

Пальцы скрещены После приблизительной идеи о том, как состояние нашей инфраструктуры будет присматривать за управлением План террафора Теперь мы можем идти вперед и бежать террафор применять

Что действительно делает Terraform?

* TerraForm Apply * Command делает фактический тяжелый подъем, он идет вперед и гарантирует, что ожидаемая конфигурация, которая упоминается в файле конфигурации, обеспечивается на облачный провайдер.

Бег Terraporm Apply ** Команды Re-Runs ** План террафора и вывод обзора предложенного состояния инфраструктуры вместе с подтверждением применить изменения, с помощью да или нет, а также генерирует локальные государственные файлы, которые содержат текущее состояние инфраструктуры на облаке в контексте упомянутых ресурсов

(ДА)

После ввода Да на террафоре применить подсказку, просто сесть назад и подожди, когда это может занять некоторое время,

azurerm_resource_group.rg: Creating…

azurerm_resource_group.rg: Creation complete after 5s [id=/subscriptions/f7e20517–6ec1–460d-9712-aa3ee55ccc6a/resourceGroups/TEST]

.testcluster: Creating…

.testcluster: Still creating… [10s elapsed]

…..

.testcluster: Creation complete after 13m27s

[id=/subscriptions/XXXXXX/resourcegroups/TEST/providers

/Microsoft.ContainerService/managedClusters/testcluster]

Apply complete! Resources: 2 added, 0 changed, 0 destroyed.

Груз! Наконец, у нас запущено кластер Aks.

Мы были успешно в состоянии обеспечить кластер Aks с террафом.

Если вы справляетесь с любыми проблемами, пожалуйста, дайте мне знать, весь код, упомянутый в этом сообщении в блоге, доступен на моем репозитории GitHub ( Aks Terraform)

До счастливого террафора …:)

Оригинал: «https://dev.to/chrisedrego/deep-dive-with-provisioning-aks-rbac-enabled-kubernetes-cluster-using-terraform-1geg»