﻿# Установка Linkerd 

> [HTML Version](install-linkerd.html)

Linkerd — это выделенный уровень инфраструктуры, который помогает обрабатывать связь между сервисами, автоматически шифровать соединения, обрабатывать повторные запросы и тайм-ауты. Установка компонента дополнений Linkerd позволяет обеспечить балансировку gRPC-трафика при масштабировании сервисов ELMA365. Также он предоставляет использование телеметрии (коэффициент успешности, задержки) и многое другое.

Linkerd является необходимым компонентом для включения поддержки масштабирования сервисов на стороне приложения ELMA365. Без установленного Linkerd масштабирование микросервисов ELMA365 работать не будет.

Про установку Linkerd с помощью инструмента Cert-manager, читайте в статье [«Установка Linkerd с помощью Cert-manager»](linkerd-with-cert-manager.md).

В этой статье рассмотрим, как:

- подготовить сертификаты с помощью openssl для Linkerd и установить его;

- [удалить чарт Linkerd с помощью Helm в Kubernetes-кластере](#delete-chart).

Установка Linkerd состоит из четырёх этапов:

1. [Подготовить сертификаты для Linkerd](#preparation-of-certificates).

2. [Загрузить Helm-чарт и конфигурационный файл](#download-helm-chart-and-config-file).

3. [Заполнить конфигурационный файл](#fill-config-file).

4. [Установить чарт Linkerd с помощью Helm в Kubernetes-кластер](#install-linkerd-chart).

## Шаг 1. Подготовить сертификаты для Linkerd

Сгенерируйте сертификаты с помощью openssl, выполнив команды ниже. Linkerd нужен сертификат привязки доверия и сертификаты эмитента с соответствующим ключом для поддержки взаимных TLS-соединений между сервисами. Для всех сертификатов требуется алгоритм ECDSA P-256.

````
\# Создать закрытый ключ CA  
openssl ecparam -name prime256v1 -genkey -noout -out ca-private.pem  
\# Создать открытый ключ CA  
openssl ec -in ca-private.pem -pubout -out ca-public.pem  
\# Создать самоподписанный сертификат CA  
openssl req -x509 -new -key ca-private.pem -days 3650 -out ca.crt -subj "/CN=root.linkerd.cluster.local"  
\# Создать закрытый ключ эмитента  
openssl ecparam -name prime256v1 -genkey -noout -out issuer-private.pem  
\# Создать открытый ключ эмитента  
openssl ec -in issuer-private.pem -pubout -out issuer-public.pem  
\# Создать запрос на подпись сертификата  
openssl req -new -key issuer-private.pem -out issuer.csr -subj "/CN=identity.linkerd.cluster.local" -addext basicConstraints=critical,CA:TRUE  
\# Создать сертификат эмитента, подписав запрос  
openssl x509 \\  
\-extfile /etc/ssl/openssl.cnf \\  
\-extensions v3\_ca \\  
\-req \\  
\-in issuer.csr \\  
\-days 3650 \\  
\-CA ca.crt \\  
\-CAkey ca-private.pem \\  
\-CAcreateserial \\  
\-extensions v3\_ca \\  
\-out issuer.crt  
\# Удалить запрос на подпись сертификата  
rm issuer.csr

## ````
Шаг 2. Загрузить Helm-чарт и конфигурационный файл

Для установки через интернет получите конфигурационный файл \[OBJECT\], выполнив команду:

````
helm repo add elma365 https://charts.elma365.tech  
helm repo update  
helm show values elma365/linkerd > values-linkerd.yaml

````
Получение конфигурационного файла для установки в закрытом контуре без доступа в интернет



1. На компьютере с доступом в интернет скачайте образы ELMA365 и загрузите их в локальный реестр образов, выполнив следующую команду:

````
helm repo add elma365 https://charts.elma365.tech  
helm repo update  
helm pull elma365/linkerd

````
Подробнее об этом читайте в статье [«Загрузка образов ELMA365»](downloadin-images-elma365.md).

2. Полученный архив чарта \[OBJECT\] скопируйте на сервер, где будет производиться установка.

3. Распакуйте этот чарт и скопируйте конфигурационный файл по умолчанию \[OBJECT\] в \[OBJECT\]:

````
tar -xf linkerd-X.Y.Z.tgz  
cp linkerd/values.yaml values-linkerd.yaml
````

## ````
Шаг 3. Заполнить конфигурационный файл

В конфигурационном файле \[OBJECT\] заполните следующие параметры для установки Linkerd:

1. Укажите DNS‑имя домена Kubernetes‑кластера в параметре \[OBJECT\], в данном случае — \[OBJECT\].

````
\# Настройки linkerd  
linkerd:  
  # DNS-имя домена Kubernetes  
  clusterDomain: cluster.local  
  # добавляет ресурс PodSecurityPolicy (устарело начиная с версии k8s v1.21)  
  enablePSP: false  
  # отключить heartbeat  
  disableHeartBeat: false    
...

2. ````
Для обеспечения высокой доступности вы можете раскомментировать параметры секции **Параметры для обеспечения высокой доступности**.

Пример включения высокой доступности

````
  
\# Настройки linkerd  
linkerd:  
...  
\#  
\# Параметры для обеспечения высокой доступности  
  controllerReplicas: 3  
  enablePodDisruptionBudget: true  
  deploymentStrategy:  
    rollingUpdate:  
      maxUnavailable: 1  
      maxSurge: 25%  
  enablePodAntiAffinity: true  
  proxy:  
    resources:  
      cpu:  
        request: 100m  
      memory:  
        limit: 250Mi  
        request: 20Mi  
  controllerResources: \&controller\_resources  
    cpu: \&controller\_resources\_cpu  
      limit: ""  
      request: 100m  
    memory:  
      limit: 250Mi  
      request: 50Mi  
  destinationResources: \*controller\_resources  
  identityResources:  
    cpu: \*controller\_resources\_cpu  
    memory:  
      limit: 250Mi  
      request: 10Mi  
  heartbeatResources: \*controller\_resources  
  proxyInjectorResources: \*controller\_resources  
  webhookFailurePolicy: Fail  
  spValidatorResources: \*controller\_resources  
\#   
...
````

3. ````
Если вы установили [средства мониторинга](install-monitoring-tools.md), укажите параметр для сбора метрик Linkerd:

````
\# Параметр подключения сбора метрик  
podMonitor:  
  enabled: true

4. ````
Если вы устанавливаете Linkerd в закрытом контуре без доступа в интернет, заполните параметры подключения к приватному **registry**.

Пример заполнения параметров для подключения к приватному registry

  
Для подключения к приватному **registry** нужно:

1. Скачать образы ELMA365 и загрузить их в локальный реестр образов. Подробнее об этом читайте в статье [«Загрузка образов ELMA365»](downloadin-images-elma365.md).

2. Задать адрес и путь в параметрах \[OBJECT\], \[OBJECT\], \[OBJECT\], \[OBJECT\].

3. Указать наименование секрета с правами доступа к приватному **registry** в параметре \[OBJECT\]. Секрет должен быть создан вручную и зашифрован в Base64.

````
\# Настройки linkerd  
linkerd:  
...  
  # параметры подключения к приватному registry  
  # адрес и путь для приватного registry  
  controllerImage: registry.example.com/linkerd/controller  
  policyController:  
    image:  
      # адрес и путь для приватного registry  
      name: registry.example.com/linkerd/policy-controller  
  proxy:  
    image:  
      # адрес и путь для приватного registry  
      name: registry.example.com/linkerd/proxy  
  proxyInit:  
    image:  
      # адрес и путь для приватного registry  
      name: registry.example.com/linkerd/proxy-init  
  # секрет с правами доступа к приватному registry должен быть создан вручную и зашифрован в Base64  
  imagePullSecrets:  
    - name: myRegistryKeySecretName

````
где формат:

- \[OBJECT\]:

	- адрес — \[OBJECT\]; 

	- путь — \[OBJECT\]; 

- \[OBJECT\]:

	- адрес — \[OBJECT\];

	- путь — \[OBJECT\];

- \[OBJECT\]:

	- адрес — \[OBJECT\];

	- путь — \[OBJECT\];

- \[OBJECT\]:

	- адрес — \[OBJECT\];

	- путь — \[OBJECT\]. 

## Шаг 4. Установить чарт Linkerd с помощью Helm в Kubernetes-кластер

Выполните установку чарта Linkerd в \[OBJECT\]. Namespace будет создан во время установки, если не был создан ранее.

В рамках статьи, команда установки выполняется из директории, где на шаге 1 были созданы сертификаты. Если выполнение команды происходит из другой директории, укажите пути до созданых на шаге 1 сертификатов (\[OBJECT\], \[OBJECT\], \[OBJECT\]). 

Для установки через интернет:

````
helm upgrade --install linkerd elma365/linkerd -f values-linkerd.yaml -n linkerd --create-namespace \\  
\--set-file linkerd.identityTrustAnchorsPEM=ca.crt \\  
\--set-file linkerd.identity.issuer.tls.crtPEM=issuer.crt \\  
\--set-file linkerd.identity.issuer.tls.keyPEM=issuer-private.pem

````
Для офлайн-установки без доступа в интернет:

````
helm upgrade --install linkerd ./linkerd -f values-linkerd.yaml -n linkerd --create-namespace \\  
\--set-file linkerd.identityTrustAnchorsPEM=ca.crt \\  
\--set-file linkerd.identity.issuer.tls.crtPEM=issuer.crt \\  
\--set-file linkerd.identity.issuer.tls.keyPEM=issuer-private.pem

Начало внимание

````
После установки Linkerd измените параметры приложения ELMA365 и настройте автомасштабирование сервисов. Подробнее читайте в статье [«Включение автомасштабирования сервисов в ELMA365 Enterprise»](autoscaling-service-enterprise.md).

````
Конец внимание

## ````
Удалить чарт Linkerd с помощью Helm в Kubernetes-кластере

````
Начало внимание

````
Перед удалением компонента дополнений Linkerd отключите автомасштабирование на стороне приложения ELMA365.

````
Конец внимание

````
Чтобы удалить чарт Linkerd в \[OBJECT\], выполните команду:

````
helm uninstall linkerd -n linkerd
````