Перед установкой Ingress Nginx необходимо установить OpenStack Cloud Controller Manager для поддержки openstack loadbalancer.
Ingress Nginx
Рекомендуемый values.yaml
values.yaml
controller: updateStrategy:
rollingUpdate:
maxUnavailable: 1
type: RollingUpdate
replicaCount: 2
resources:
requests:
cpu: 300m
memory: 150Mi
limits:
memory: 150Mi
ingressClass: nginx
ingressClassResource:
name: nginx
controllerValue: "k8s.io/nginx"
config:
proxy-real-ip-cidr: 10.0.0.0/8
use-proxy-protocol: "true"
server-tokens: "false"
log-format-escape-json: "true"
log-format-upstream: '{"msec": "$msec", "connection": "$connection", "connection_requests": "$connection_requests", "pid": "$pid", "request_id": "$request_id", "request_length": "$request_length", "remote_addr": "$remote_addr", "remote_user": "$remote_user", "remote_port": "$remote_port", "time_local": "$time_local", "time_iso8601": "$time_iso8601", "request": "$request", "request_uri": "$request_uri", "args": "$args", "status": "$status", "body_bytes_sent": "$body_bytes_sent", "bytes_sent": "$bytes_sent", "http_referer": "$http_referer", "http_user_agent": "$http_user_agent", "http_x_forwarded_for": "$http_x_forwarded_for", "http_host": "$http_host", "server_name": "$server_name", "request_time": "$request_time", "upstream": "$upstream_addr", "upstream_connect_time": "$upstream_connect_time", "upstream_header_time": "$upstream_header_time", "upstream_response_time": "$upstream_response_time", "upstream_response_length": "$upstream_response_length", "upstream_cache_status": "$upstream_cache_status", "ssl_protocol": "$ssl_protocol", "ssl_cipher": "$ssl_cipher", "scheme": "$scheme", "request_method": "$request_method", "server_protocol": "$server_protocol", "pipe": "$pipe", "gzip_ratio": "$gzip_ratio"}'
large-client-header-buffers: "4 16k"
allow-snippet-annotations: "true"
annotations-risk-level: "Critical"
affinity:
podAntiAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
- labelSelector :
matchExpressions:
- key : app.kubernetes.io/component
operator: In
values:
- controller
topologyKey: "kubernetes.io/hostname"
service:
type: LoadBalancer
annotations:
loadbalancer.openstack.org/proxy-protocol : "true"
metrics:
enabled: false
serviceMonitor:
enabled: false
additionalLabels:
release: "prometheus"
podAnnotations:
prometheus.io/port : "10254"
prometheus.io/scrape : "false"
|
При необходимости отредактируйте параметры replicaCount: 2 (количество подов nginx), proxy-real-ip-cidr: 10.0.0.0/8 (должен соответствовать подсети вашего kubernetes), а так же секцию affinity, которая запрещает контейнерам запускаться на одной и той же ноде.
Установка
helm repo add ingress-nginx https: //kubernetes .github.io /ingress-nginx
helm repo update helm upgrade -- install --namespace ingress-nginx --create-namespace --values values.yaml ingress ingress-nginx /ingress-nginx
|
CertManager
Рекомендуемый values.yaml
values.yaml
ingressShim: defaultIssuerKind: "ClusterIssuer"
defaultIssuerName: "letsencrypt-prod"
extraArgs: - "--dns01-recursive-nameservers-only"
- "--dns01-recursive-nameservers=8.8.8.8:53"
- "--leader-elect=false"
resources: requests:
cpu: 50m
memory: 128Mi
limits:
memory: 128Mi
webhook: resources:
requests:
cpu: 20m
memory: 64Mi
limits:
memory: 64Mi
cainjector: resources:
requests:
cpu: 20m
memory: 200M
limits:
memory: 200M
startupapicheck: resources:
requests:
cpu: 10m
memory: 64Mi
limits:
memory: 64Mi
|
Базовый clusterissuer.yaml для простого HTTP-01 challenge
clusterissuer.yaml
apiVersion: cert-manager.io/v1
kind: ClusterIssuer
metadata: name: letsencrypt-prod
namespace: cert-manager
spec: acme:
server: https : //acme-v02.api.letsencrypt.org/directory
email: admin@example.com
privateKeySecretRef:
name: letsencrypt-prod
solvers:
- http01 :
ingress:
ingressClassName: nginx
|
Установка
# Установить CRD лучше отдельной командой kubectl apply -f https: //github .com /jetstack/cert-manager/releases/download/v1 .14.5 /cert-manager .crds.yaml
# Установка чарта: helm repo add jetstack https: //charts .jetstack.io
helm repo update helm upgrade -- install --namespace cert-manager --create-namespace --values values.yaml cert-manager jetstack /cert-manager --version v1.14.5
# Установка ClusterIssuer: kubectl apply -f clusterissuer.yaml |