Установка сервиса 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