Table of Contents

Установка сервиса nginx-ingress

Продукты: МоиОтчеты Корпоративный Сервер

Все описанные команды выполняется только на master узле!

Добавление в Helm репозитория ingress-nginx:

helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
helm repo update

Установка nginx в Kubernetes

Внимание! Переменная MAIN_IF должна указывать IP адрес внешнего интерфейса для доступа к серверу отчётов.

export MAIN_IF=192.168.1.191
kubectl create namespace nginx

helm upgrade --install  nginx-ingress ingress-nginx/ingress-nginx \
    --create-namespace --namespace nginx \
    --set controller.replicaCount=2 \
    --set controller.service.externalIPs[0]=$MAIN_IF \
    --set controller.extraArgs.v=2

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

HOST=my.server-server.ru
NAMESPACE=fr-corporate-server

cat <<EOF | kubectl apply -n $NAMESPACE -f -
kind: Ingress
apiVersion: networking.k8s.io/v1
metadata:
  name: $HOST-gateway
  namespace: $NAMESPACE
  annotations:
    ingress.kubernetes.io/ssl-redirect: 'true'
    nginx.ingress.kubernetes.io/configuration-snippet: |
      add_header  X-Robots-Tag "noindex, nofollow, nosnippet, noarchive";
    nginx.ingress.kubernetes.io/limit-rps: '50'
    nginx.ingress.kubernetes.io/proxy-body-size: '0'
    nginx.ingress.kubernetes.io/proxy-buffering: 'off'
    nginx.ingress.kubernetes.io/proxy-request-buffering: 'off'
spec:
  ingressClassName: nginx
  tls:
    - hosts:
        - $HOST
      secretName: corporate-tls-secret
  rules:
    - host: $HOST
      http:
        paths:
          - path: /
            pathType: ImplementationSpecific
            backend:
              service:
                name: fr-gateway
                port:
                  number: 80
EOF

Далее понадобится SSL сертификат для настройки защищённого соединения. Обычно его можно купить/получить у регистратора доменного имени или купить у удостоверяющего центра. При использовании сервера отчётов в интранете можно создать самостоятельно подписанный сертификат с помощью следующей команды:

export CERT_NAME=my.server-server.ru
openssl req -x509 -nodes -days 3650 -newkey rsa:2048 -keyout del_me_file.key -out del_me_file.cer -subj "/CN=$CERT_NAME/O=$CERT_NAME"

Регистрация сертификата в Kubernetes c именем fr-corporate-tls. Далее этот сертификат используется различными компонентами отчёта, в том числе nginx.

kubectl create secret tls fr-corporate-tls --key del_me_file.key --cert del_me_file.cer

Регистрация nginx-ingress в кластере Kubernetes.
Необходимо установить переменную HOST, соответствующую доменному имени сервера отчётов.

cat <<EOF | kubectl apply -n $NAMESPACE -f -
kind: Ingress
apiVersion: networking.k8s.io/v1
metadata:
  name: $HOST-gateway
  namespace: $NAMESPACE
  annotations:
    ingress.kubernetes.io/ssl-redirect: 'true'
    nginx.ingress.kubernetes.io/configuration-snippet: |
      add_header  X-Robots-Tag "noindex, nofollow, nosnippet, noarchive";
    nginx.ingress.kubernetes.io/limit-rps: '50'
    nginx.ingress.kubernetes.io/proxy-body-size: '0'
    nginx.ingress.kubernetes.io/proxy-buffering: 'off'
    nginx.ingress.kubernetes.io/proxy-request-buffering: 'off'
spec:
  ingressClassName: nginx
  tls:
    - hosts:
        - $HOST
      secretName: corporate-tls-secret
  rules:
    - host: $HOST
      http:
        paths:
          - path: /
            pathType: ImplementationSpecific
            backend:
              service:
                name: fr-gateway
                port:
                  number: 80
EOF