Стадия жизненного цикла модуля: General Availability
У модуля есть требования для установки
Внимание! При изменении сетевой конфигурации убедитесь, что cert-manager issuer и модуль Code используют один и тот же Ingress class.
- Проверьте
spec.network.ingressClassвCodeInstance.- Проверьте Ingress class в конфигурации cert-manager
Issuer/ClusterIssuer.- После смены Ingress class при необходимости перевыпустите сертификаты.
Настройка работы Git SSH через порт 22
По умолчанию в кластере Deckhouse используется встроенный Ingress-контроллер — d8-ingress-nginx. Этот контроллер предоставляет доступ к веб-интерфейсу (UI) через стандартные порты HTTP (80) и HTTPS (443). Однако d8-ingress-nginx не поддерживает проксирование TCP-портов.
Для проксирования внешнего TCP-трафика через порт 22 (Git SSH) предусмотрена специальная опция в конфигурации модуля. При её использовании разворачивается Haproxy с сервисом типа LoadBalancer. Haproxy перенаправляет трафик с порта 22 на соответствующий Git SSH Pod. Порты 80 и 443 продолжают обрабатываться d8-ingress-nginx, где происходит терминация TLS-трафика.
Самоподписные сертификаты (сертификаты выпущенные внутренним УЦ)
Чтобы использовать самоподписные сертификаты в различных подключениях (HTTPS, rediss, SMTPS и т.д.), создайте secret или configmap в пространстве d8-code с необходимыми сертификатами и объявите в CR:
...
spec:
network:
certificates:
customCAs:
- secret: custom-tls-ca
keys:
- ca.crt
- tls.crt
- secret: more-custom-CAs
keys:
- custom-ca-1.crt
- configMap: custom-CA-cm
- configMap: more-custom-CAs-cm
keys:
- custom-ca-2.crt
- custom-ca-3.crt
...Настройка пользовательского сертификата для web UI
Чтобы использовать собственный TLS-сертификат для web endpoint, создайте TLS Secret в d8-code и укажите его в spec.network.web.https.
- Создайте TLS Secret в
d8-code:
kubectl -n d8-code create secret tls code-web-tls \
--cert=/path/to/tls.crt \
--key=/path/to/tls.key- Настройте
CodeInstanceна использование этого Secret для web UI и добавьте сертификат вnetwork.certificates.customCAs, чтобы распространить доверие на все контейнеры:
apiVersion: deckhouse.io/v1
kind: CodeInstance
metadata:
name: code
spec:
network:
certificates:
customCAs:
- secret: code-web-tls
keys:
- tls.crt
web:
hostname: code.example.com
https:
mode: CustomCertificate
customCertificate:
secretName: code-web-tlsSecret должен быть в формате kubernetes.io/tls, а сертификат должен быть валиден для указанного hostname.
Если сертификат выпущен приватным УЦ, предпочтительно указывать в customCAs сертификат/цепочку УЦ.
Особенности использования опции ownLoadBalancer
Внимание! ownLoadBalancer НЕ ПОДДЕРЖИВАЕТ следующие режимы:
HostPort,HostPortWithSSLPassthrough,HostPortWithProxyProtocolиHostWithFailoverРежимы Ingress-nginx контроллера. Эти режимы относятся к способам приема трафика из внешней сети d8-ingress-nginx IngressNginxController . Если в кластере используется один из них, не включайтеownLoadBalancer.
-
Отдельный IP-адрес: При активации опции
ownLoadBalancer.enabledдля модуля Code выделяется отдельный IP-адрес, отличный от основного IP-адреса Deckhouse. Для этого адреса необходимо создать отдельную DNS-запись. По этой DNS-записи будут доступны:- Веб-интерфейс (UI) на портах 80 и 443.
- Git SSH на порту 22.
-
Игнорирование параметров: При включении опции
ownLoadBalancer.enabledследующие параметры игнорируются:spec.network.gitSsh.hostnamespec.network.gitSsh.service.typespec.network.gitSsh.service.nodePort
Вместо этого сервис
shellполучает типLoadBalancer, а Git SSH становится доступным по тому же домену, что и веб-сервис. -
Значение по умолчанию:
ownLoadBalancer.enabledимеет значениеtrueпо умолчанию.
Настройка ownLoadBalancer.httpBackends
Используйте spec.network.ownLoadBalancer.httpBackends, чтобы явно указать, в какие экземпляры IngressNginxController HAProxy LoadBalancer модуля Code должен отправлять HTTP(S)-трафик.
- Если список пустой, имена backend-сервисов рассчитываются автоматически на основе выбранного Ingress class.
- Используйте этот параметр, если в кластере несколько ingress-контроллеров и нужно закрепить трафик Code за конкретными контроллерами.
Пример:
apiVersion: deckhouse.io/v1
kind: CodeInstance
metadata:
name: code
spec:
network:
ownLoadBalancer:
enabled: true
httpBackends:
- system-controllerПример конфигурации
Ниже приведён пример включения Haproxy для проксирования Git SSH в CodeInstance:
apiVersion: deckhouse.io/v1
kind: CodeInstance
metadata:
name: code
spec:
...
network:
ownLoadBalancer:
enabled: true
...Чеклист проверки
После применения изменений проверьте:
kubectl -n d8-code get svc shell webservice-default- У нужного сервиса(ов) назначен внешний IP
LoadBalancer. - DNS A-запись указывает на этот внешний IP.
- Доступ по Git SSH работает:
ssh -T git@<host> -p 22Схема работы Haproxy
Haproxy внутри кластера Deckhouse работает по следующей схеме:
