Overview
Kubernetes에서 유용하게 쓰이고 있는 Ingress Nginx에 대해서 알아본다.
MetalLB의 관한 내용은 아래의 글을 참고하길 바란다.
2023.05.03 - [Container Orchestration/Kubernetes] - MetalLB란?
Ingress Nginx란?
Ingress Nginx는 Kubernetes 클러스터로의 HTTP 및 HTTPS 트래픽 라우팅을 처리하기 위해 널리 사용되는 컨트롤러이다. 외부 트래픽의 입구(진입점) 역할을 하며 Ingress 리소스에 지정된 규칙에 따라 클러스터 내의 적절한 서비스로 전달한다. URL 라우팅을 통해 외부에서 내부 서비스에 액세스할 수 있도록 하여 역방향 프록시 및 로드 밸런서 역할을 한다. 주요 구성 요소와 기능에 대한 자세한 개요는 다음과 같다.
Ingress Nginx의 주요 기능
- 트래픽 라우팅
- 호스트 기반 라우팅 : 도메인 이름을 기반으로 트래픽을 라우팅한다. 예를 들어 요청을 `example.com` 을 하나의 서비스로 라우팅하고 `another.com` 을 다른 서비스로 라우팅할 수 있다.
- 경로 기반 라우팅 : URL 경로를 기반으로 트래픽을 라우팅한다. 예를 들어, `example.com/blog` 및 `example.com/shop` 다른 서비스로 연결시킬 수 있다.
- SSL/TLS 종료
- Ingress Nginx는 SSL/TLS 종료를 관리하여 암호화된 트래픽이 백엔드 서비스에 도달하기 전에 처리할 수 있다. 이는 서비스 자체에서 암호화 오버헤드를 오프로드하고 인증서 관리를 중앙 집중화한다.
- 로드 밸런싱
- Nginx를 통해 로드 밸런싱을 제공하여 수신 트래픽을 서비스의 여러 인스턴스에 분산하고, 높은 트래픽 로드 처리를 개선하고 내결함성을 높인다.
- 사용자 정의 가능한 Annotation
- Ingress 리소스는 Annotation을 사용하여 구성할 수 있다. 이를 통해 시간 초과, 요청에 허용되는 본문 크기, SSL 사용 여부 및 Nginx와 관련된 기타 여러 설정을 사용자 정의할 수 있다.
- 로깅 및 모니터링
- 자세한 액세스 및 오류 로깅을 지원한다. 측정항목은 Prometheus를 통해 노출 및 모니터링할 수 있으며 Grafana와 같은 도구를 사용하여 시각화할 수 있다.
- 선호도 및 세션 고정성
- 동일한 클라이언트의 요청을 동일한 Pod로 라우팅할 수 있는 세션 지속성을 지원한다. 이는 상태 저장(Stateful) 애플리케이션에 중요하다.
Ingress Nginx Annotation(주석) 정리
Ingress Nginx는 주석을 사용하여동작을 맞춤설정한다. Ingress 컨트롤러가 HTTP 요청을 처리하는 방법의 다양한 측면을 세부적으로 제어할 수 있다. 다음은 Nginx Ingress에 사용되는 주요 주석 중 일부이다.
- `nginx.ingress.kubernetes.io/rewrite-target` : 요청이 애플리케이션으로 전송되기 전에 요청의 URL을 다시 작성하도록 지정
- `nginx.ingress.kubernetes.io/ssl-redirect` : HTTPS 리디렉션을 강제할지 여부를 제어
- `nginx.ingress.kubernetes.io/force-ssl-redirect` : 서버가 TLS로 구성되지 않은 경우에도 HTTPS 리디렉션을 강제
- `nginx.ingress.kubernetes.io/use-regex` : 경로 값을 정규식으로 해석해야 하는지 여부 확인
- `nginx.ingress.kubernetes.io/configuration-snippet` : 서버 또는 위치 블록에 사용자 정의 구성을 삽입
- `nginx.ingress.kubernetes.io/limit-rps` : 초당 요청을 Ingress에 정의된 경로로 제한
- `nginx.ingress.kubernetes.io/limit-connections` : 단일 IP 주소에서 허용되는 동시 연결 수를 제한
- `nginx.ingress.kubernetes.io/auth-type` : 인증 유형(예: 기본 또는 다이제스트)을 지정
- `nginx.ingress.kubernetes.io/auth-secret` : 인증을 위한 사용자 이름과 비밀번호가 포함된 비밀의 이름을 지정
- `nginx.ingress.kubernetes.io/auth-realm`: 인증을 위한 영역을 설정
다음은 이러한 주석 중 일부를 사용하는 방법을 보여주는 예제 YAML 파일이다.
apiVersion: networking.k8s.io/v1kind: Ingressmetadata:
name: example-ingress
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /$1
nginx.ingress.kubernetes.io/ssl-redirect: "true"
nginx.ingress.kubernetes.io/use-regex: "true"
nginx.ingress.kubernetes.io/limit-rps: "5"
nginx.ingress.kubernetes.io/configuration-snippet: |
more_set_headers "X-Robots-Tag: noindex, nofollow";
spec:
rules:
- http:
paths:
- path: /something(/|$)(.*)
pathType: Prefix
backend:
service:
name: some-service
port:
number: 80
- Rewrite Target: path에 정의된 캡처 그룹을 기반으로 들어오는 URL을 다시 작성
- SSL Redirect: HTTP 요청을 HTTPS로 리디렉션
- Use Regex : 지정된 경로를 정규식으로 처리
- Rate Limiting: 초당 요청을 5개로 제한
- Configuration Snippet: Nginx 구성에 직접 추가 구성을 추가
Ingress Nginx 설치
Ingress Nginx 배포에는 일반적으로 YAML Manifest 또는 Helm 차트를 사용하여 Nginx Ingress Controller를 설치하는 작업을 사용한다. 따라서 Manifest와 Helm을 사용해서 설치하는 방법을 각각 알아본다.
설치하기 전에 Onpremise 환경이라면 MetalLB를 설치후에 Ingress Nginx를 설치해야 Service를 LoadBalancer Type으로 설정하여 설치할 수 있다. 그리고 EXTERNAL-IP로 받아오는 IP는 MetalLB의 IPAddressPool에 설정된 값을 가져오게 된다.
cat <<EOF >> metallb-config.yaml
# 사용 apiversion
apiVersion: metallb.io/v1beta1
kind: IPAddressPool
metadata:
name: ip-pool
namespace: metallb-system
spec:
addresses:
# 사용할 ip address pool
- 143.92.123.123-143.92.123.123
autoAssign: true
---
apiVersion: metallb.io/v1beta1
# metalib의 l2모드를 사용한다.
kind: L2Advertisement
metadata:
name: l2-network
namespace: metallb-system
spec:
# 사용할 ipAddressPools
ipAddressPools:
- ip-pool
EOF
k get po -n ingress-nginx
NAME READY STATUS RESTARTS AGE
ingress-nginx-controller-6766768d48-zm8cj 1/1 Running 0 36s
k get svc -n ingress-nginx
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
ingress-nginx-controller LoadBalancer 10.96.140.20 143.92.123.123 80:31665/TCP,443:30379/TCP 44s
ingress-nginx-controller-admission ClusterIP 10.100.76.3 <none> 443/TCP 44s
Install With Helm
https://github.com/kubernetes/ingress-nginx/tree/main/charts/ingress-nginx
Repo를 추가한다.
helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
helm repo update
설치한다.
helm install [RELEASE_NAME] ingress-nginx/ingress-nginx
Chart를 가져와서 Values 수정후 설치를 하는 방법은 아래와 같다.
helm install ingress-nginx . -n ingress-nginx -f ingress-nginx-values.yaml --create-namespace
# lint
helm lint --values ingress-nginx-values.yaml
# dry run
helm install ingress-nginx . -n ingress-nginx -f ingress-nginx-values.yaml --dry-run
# 설치
helm install ingress-nginx . -n ingress-nginx -f ingress-nginx-values.yaml
# 업그레이드
helm upgrade ingress-nginx . -n ingress-nginx -f ingress-nginx-values.yaml
helm으로 fluent-bit sidecar를 붙이는 방법도 간단하다.
`templates/extra-configmap.yaml`
아래와 같이 template을 추가해준다.
{{- if .Values.controller.extraConfigMaps }}
{{- range .Values.controller.extraConfigMaps }}
apiVersion: v1
kind: ConfigMap
metadata:
name: {{ .name }}
labels:
{{- toYaml .labels | nindent 4 }}
data:
{{- toYaml .data | nindent 2 }}
{{- end }}
{{- end }}
`ingress-nginx-values.yaml`
아래와 같이 값을 추가해준다.
controller:
...
extraContainers:
- name: fluent-bit
image: fluent/fluent-bit:latest
imagePullPolicy: IfNotPresent
ports:
- containerPort: 2020
volumeMounts:
- name: varlog
mountPath: /var/log
- name: fluent-bit-config
mountPath: /fluent-bit/etc
resources:
limits:
memory: 500Mi
requests:
cpu: 100m
memory: 100Mi
extraVolumes:
- name: shared-data
emptyDir: {}
- name: fluent-bit-config
configMap:
name: fluent-bit-config
extraVolumeMounts:
- name: shared-data
mountPath: /var/log/nginx
- name: fluent-bit-config
mountPath: /fluent-bit/etc/
extraConfigMaps:
- name: fluent-bit-config
labels:
type: fluent-bit
data:
fluent-bit.conf: |
[SERVICE]
Flush 1
Log_Level info
Parsers_File parsers.conf
[INPUT]
Name tail
Path /var/log/nginx/access.log
Parser nginx_access_parser
Tag nginx_access
[INPUT]
Name tail
Path /var/log/nginx/error.log
Parser nginx_error_parser
Tag nginx_error
[FILTER]
Name grep
Match nginx_access
Regex log .*fgn.*
[FILTER]
Name modify
Match nginx_access
Add log_type nginx_access
[FILTER]
Name modify
Match nginx_error
Add log_type nginx_error
[OUTPUT]
Name stdout
Match *
[OUTPUT]
Name loki
Match *
Host loki.somaz.link
Port 443
URI /loki/api/v1/push
tls On
Labels job=fluent-bit, log_type=$log_type
parsers.conf: |
[PARSER]
Name nginx_access_parser
Format regex
Regex ^(?<remote_addr>[^ ]*) - (?<remote_user>[^ ]*) \[(?<time>[^\]]*)\] "(?<method>\S+) (?<request>[^ ]*) (?<http_protocol>[^"]*)" (?<status>[^ ]*) (?<body_bytes_sent>[^ ]*) "(?<http_referer>[^"]*)" "(?<http_user_agent>[^"]*)" (?<request_length>[^ ]*) (?<request_time>[^ ]*) \[(?<upstream_name>[^\]]*)\] \[(?<upstream_addr>[^\]]*)\] (?<upstream_response_length>[^ ]*) (?<upstream_response_time>[^ ]*) (?<upstream_status>[^ ]*) (?<request_id>[^ ]*)$
Time_Key time
Time_Format %d/%b/%Y:%H:%M:%S %z
[PARSER]
Name nginx_error_parser
Format regex
Regex ^(?<time>\d{4}/\d{2}/\d{2} \d{2}:\d{2}:\d{2}) \[(?<log_level>\w+)\] (?<process_info>\d+#\d+): (?<message>.*)$
Time_Key time
Time_Format %Y/%m/%d %H:%M:%S
마지막으로 다시 업그레이드 해준다.
helm upgrade ingress-nginx . -n ingress-nginx -f ingress-nginx-values.yaml
logs 를 사용해서 sidecar가 잘 붙었는지 확인 가능하다.
k get po -n ingress-nginx
NAME READY STATUS RESTARTS AGE
ingress-nginx-controller-6766768d48-zm8cj 0/1 Terminating 0 37d
ingress-nginx-controller-84d78c7d45-ptt97 2/2 Running 0 82s
k logs -n ingress-nginx ingress-nginx-controller-84d78c7d45-ptt97 -c fluent-bit
Fluent Bit v3.0.7
* Copyright (C) 2015-2024 The Fluent Bit Authors
* Fluent Bit is a CNCF sub-project under the umbrella of Fluentd
* https://fluentbit.io
___________.__ __ __________.__ __ ________
\_ _____/| | __ __ ____ _____/ |_ \______ \__|/ |_ ___ _\_____ \
| __) | | | | \_/ __ \ / \ __\ | | _/ \ __\ \ \/ / _(__ <
| \ | |_| | /\ ___/| | \ | | | \ || | \ / / \
\___ / |____/____/ \___ >___| /__| |______ /__||__| \_/ /______ /
\/ \/ \/ \/ \/
[2024/07/05 08:55:46] [ info] [fluent bit] version=3.0.7, commit=73e72bdf9a, pid=1
[2024/07/05 08:55:46] [ info] [storage] ver=1.5.2, type=memory, sync=normal, checksum=off, max_chunks_up=128
[2024/07/05 08:55:46] [ info] [cmetrics] version=0.9.1
[2024/07/05 08:55:46] [ info] [ctraces ] version=0.5.1
[2024/07/05 08:55:46] [ info] [input:tail:tail.0] initializing
[2024/07/05 08:55:46] [ info] [input:tail:tail.0] storage_strategy='memory' (memory only)
[2024/07/05 08:55:46] [ info] [input:tail:tail.1] initializing
[2024/07/05 08:55:46] [ info] [input:tail:tail.1] storage_strategy='memory' (memory only)
[2024/07/05 08:55:46] [ info] [output:stdout:stdout.0] worker #0 started
[2024/07/05 08:55:46] [ info] [output:loki:loki.1] configured, hostname=loki.somaz.link:443
[2024/07/05 08:55:46] [ info] [sp] stream processor started
아래와 같이 curl로 확인도 가능하고, grafana를 연동해서 시각화도 할 수 있다.
curl -G -s "https://loki.somaz.link/loki/api/v1/query_range" \
--data-urlencode "query={job=\"fluent-bit\",log_type=\"nginx_error\"}" \
--data-urlencode "limit=10" \
--data-urlencode "start=$(date --date='1 hour ago' +%s)" \
--data-urlencode "end=$(date +%s)"
curl -G -s "https://loki.somaz.link/loki/api/v1/query_range" \
--data-urlencode "query={job=\"fluent-bit\",log_type=\"nginx_access\"}" \
--data-urlencode "limit=10" \
--data-urlencode "start=$(date --date='1 hour ago' +%s)" \
--data-urlencode "end=$(date +%s)"
Install By Manifest
https://github.com/kubernetes/ingress-nginx/blob/main/deploy/static/provider/baremetal/deploy.yaml
해당 Manifest를 사용해서 배포하면 된다.
kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/main/deploy/static/provider/baremetal/deploy.yaml
파일을 가져와서 배포하고 싶다면 아래와 같이 하면된다.
# 파일 다운로드
curl -LO https://raw.githubusercontent.com/kubernetes/ingress-nginx/main/deploy/static/provider/baremetal/deploy.yaml
# 배포
k apply -f deploy.yaml -n ingress-nginx
Manifest로 배포할 시에는 아래와 같이 간단하게 FluentBit Sidecar를 사용해서, `nginx/access.log` , `nginx/error.log` 를 수집하여 Loki로 전달할 수 있다.
---
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app.kubernetes.io/component: controller
app.kubernetes.io/instance: ingress-nginx
app.kubernetes.io/name: ingress-nginx
app.kubernetes.io/part-of: ingress-nginx
app.kubernetes.io/version: 1.10.1
name: ingress-nginx-controller
namespace: ingress-nginx
...
volumeMounts:
- name: webhook-cert
mountPath: /usr/local/certificates/
readOnly: true
- name: shared-data
mountPath: /var/log/nginx
resources:
requests:
cpu: 100m
memory: 90Mi
- name: fluent-bit
image: fluent/fluent-bit:2.2.2
imagePullPolicy: Always
volumeMounts:
- name: shared-data
mountPath: /var/log/nginx
- name: fluent-bit-config
mountPath: /fluent-bit/etc/
volumes:
- name: webhook-cert
secret:
secretName: ingress-nginx-admission
- name: shared-data
emptyDir: {}
- name: fluent-bit-config
configMap:
name: fluent-bit-config
---
`fluentbit-config.yaml`
apiVersion: v1
kind: ConfigMap
metadata:
name: fluent-bit-config
namespace: ingress-nginx
data:
fluent-bit.conf: |
[SERVICE]
Flush 1
Log_Level info
Parsers_File parsers.conf
[INPUT]
Name tail
Path /var/log/nginx/access.log
Parser nginx_access_parser
Tag nginx_access
[INPUT]
Name tail
Path /var/log/nginx/error.log
Parser nginx_error_parser
Tag nginx_error
[FILTER]
Name grep
Match nginx_access
Regex log .*fgn.*
[FILTER]
Name modify
Match nginx_access
Add log_type nginx_access
[FILTER]
Name modify
Match nginx_error
Add log_type nginx_error
[OUTPUT]
Name stdout
Match *
[OUTPUT]
Name loki
Match *
Host loki-gateway.somaz.link
Port 443
URI /loki/api/v1/push
tls On
Labels job=fluent-bit, log_type=$log_type
parsers.conf: |
[PARSER]
Name nginx_access_parser
Format regex
Regex ^(?<remote_addr>[^ ]*) - (?<remote_user>[^ ]*) \[(?<time>[^\]]*)\] "(?<method>\S+) (?<request>[^ ]*) (?<http_protocol>[^"]*)" (?<status>[^ ]*) (?<body_bytes_sent>[^ ]*) "(?<http_referer>[^"]*)" "(?<http_user_agent>[^"]*)" (?<request_length>[^ ]*) (?<request_time>[^ ]*) \[(?<upstream_name>[^\]]*)\] \[(?<upstream_addr>[^\]]*)\] (?<upstream_response_length>[^ ]*) (?<upstream_response_time>[^ ]*) (?<upstream_status>[^ ]*) (?<request_id>[^ ]*)$
Time_Key time
Time_Format %d/%b/%Y:%H:%M:%S %z
[PARSER]
Name nginx_error_parser
Format regex
Regex ^(?<time>\d{4}/\d{2}/\d{2} \d{2}:\d{2}:\d{2}) \[(?<log_level>\w+)\] (?<process_info>\d+#\d+): (?<message>.*)$
Time_Key time
Time_Format %Y/%m/%d %H:%M:%S
이런식으로 수정하여 수집을 해주면 아래와 같이 검색이 가능하고 Grafana로 시각화도 할 수 있다.
curl -G -s "https://loki-gateway.somaz.link/loki/api/v1/query_range" \
--data-urlencode "query={job=\"fluent-bit\",log_type=\"nginx_access\"}" \
--data-urlencode "limit=10" \
--data-urlencode "start=$(date --date='1 hour ago' +%s)" \
--data-urlencode "end=$(date +%s)"
{"status":"success","data":{"resultType":"streams","result":[{"stream":{"job":"fluent-bit","log_type":"nginx_access"},"values":[["1706081048896054832","{\"log\":\"10.10.100.24 - 1 [24/Jan/2024:07:24:08 +0000] \\\"POST /user/leader-character/position/update HTTP/1.1\\\" 200 213 \\\"-\\\" \\\"UnityPlayer/2022.3.1f1 (UnityWebRequest/1.0, libcurl/7.84.0-DEV)\\\" 606 0.012 [sn-server-dev1-sn-server-game-dev1-80] [] 10.233.105.94:8080 213 0.012 200 c65ef0adbdc886d6d731bcdee1f09753\",\"log_type\":\"nginx_access\"}"],["1706081021518809926","{\"log\":\"10.10.100.24 - 25 [24/Jan/2024:07:23:41 +0000] \\\"POST /guild/get HTTP/1.1\\\" 200 417 \\\"-\\\" \\\"UnityPlayer/2022.3.1f1 (UnityWebRequest/1.0, libcurl/7.84.0-DEV)\\\" 353 0.011 [sn-server-dev1-sn-server-game-dev1-80] [] 10.233.105.94:8080 417 0.012 200 dcb2b475b0ffd7815df0d51556a0fd9c\",\"log_type\":\"nginx_access\"}"],["1706081021463331838","{\"log\":\"10.10.100.24 - 25 [24/Jan/2024:07:23:41 +0000] \\\"POST /stat-upgrade/get HTTP/1.1\\\" 200 117 \\\"-\\\" \\\"UnityPlayer/2022.3.1f1 (UnityWebRequest/1.0, libcurl/7.84.0-DEV)\\\" 360 0.006 [sn-server-dev1-sn-server-game-dev1-80] [] 10.233.105.94:8080 117 0.008 200 3452a1a6ea9a8d1c1470a4fa8da6f4af\",\"log_type\":\"nginx_access\"}"],["1706081021429729524","{\"log\":\"10.10.100.24 - 25 [24/Jan/2024:07:23:41 +0000] \\\"POST /dungeon/stage-dungeon/get HTTP/1.1\\\" 200 22 \\\"-\\\" \\\"UnityPlayer/2022.3.1f1 (UnityWebRequest/1.0, libcurl/7.84.0-DEV)\\\" 369 0.006 [sn-server-dev1-sn-server-game-dev1-80] [] 10.233.105.94:8080 22 0.004 200 e11bf5f3b51e7a166950f409604eea25\",\"log_type\":\"nginx_access\"}"],["1706081021400093773","{\"log\":\"10.10.100.24 - 25 [24/Jan/2024:07:23:41 +0000] \\\"POST /event-pass/get HTTP/1.1\\\" 200 20 \\\"-\\\" \\\"UnityPlayer/2022.3.1f1 (UnityWebRequest/1.0, libcurl/7.84.0-DEV)\\\" 358 0.008 [sn-server-dev1-sn-server-game-dev1-80] [] 10.233.105.94:8080 20 0.008 200 645368bd7ca65b79a7744e0329f60dca\",\"log_type\":\"nginx_access\"}"],["1706081021317536728","{\"log\":\"10.10.100.24 - 25 [24/Jan/2024:07:23:41 +0000] \\\"POST /game-event/get HTTP/1.1\\\" 200 640 \\\"-\\\" \\\"UnityPlayer/2022.3.1f1 (UnityWebRequest/1.0, libcurl/7.84.0-DEV)\\\" 358 0.013 [sn-server-dev1-sn-server-game-dev1-80] [] 10.233.105.94:8080 640 0.012 200 05f440ca128244a57da4563c8133ff87\",\"log_type\":\"nginx_access\"}"],["1706081021258885802","{\"log\":\"10.10.100.24 - 25 [24/Jan/2024:07:23:41 +0000] \\\"POST /like-ability-quest/get HTTP/1.1\\\" 200 20 \\\"-\\\" \\\"UnityPlayer/2022.3.1f1 (UnityWebRequest/1.0, libcurl/7.84.0-DEV)\\\" 366 0.005 [sn-server-dev1-sn-server-game-dev1-80] [] 10.233.105.94:8080 20 0.008 200 9b4ef1b9d5b379dcb498639fa258e062\",\"log_type\":\"nginx_access\"}"],["1706081021226876432","{\"log\":\"10.10.100.24 - 25 [24/Jan/2024:07:23:41 +0000] \\\"POST /membership/get HTTP/1.1\\\" 200 39 \\\"-\\\" \\\"UnityPlayer/2022.3.1f1 (UnityWebRequest/1.0, libcurl/7.84.0-DEV)\\\" 358 0.008 [sn-server-dev1-sn-server-game-dev1-80] [] 10.233.105.94:8080 39 0.008 200 bee9c7544b2281c452a7c394f63643f7\",\"log_type\":\"nginx_access\"}"],["1706081021154217636","{\"log\":\"10.10.100.24 - 25 [24/Jan/2024:07:23:41 +0000] \\\"POST /item/get HTTP/1.1\\\" 200 251 \\\"-\\\" \\\"UnityPlayer/2022.3.1f1 (UnityWebRequest/1.0, libcurl/7.84.0-DEV)\\\" 352 0.006 [sn-server-dev1-sn-server-game-dev1-80] [] 10.233.105.94:8080 251 0.004 200 5f5769e5b2d86ff7f326cb6c2cfcc72f\",\"log_type\":\"nginx_access\"}"],["1706081021123018100","{\"log\":\"10.10.100.24 - 25 [24/Jan/2024:07:23:41 +0000] \\\"POST /deck/get HTTP/1.1\\\" 200 113 \\\"-\\\" \\\"UnityPlayer/2022.3.1f1 (UnityWebRequest/1.0, libcurl/7.84.0-DEV)\\\" 352 0.005 [sn-server-dev1-sn-server-game-dev1-80] [] 10.233.105.94:8080 113 0.008 200 dd85cd8d37295a6ff2b4d84a2bfcd254\",\"log_type\":\"nginx_access\"}"]]}],"stats":{"summary":{"bytesProcessedPerSecond":2777344,"linesProcessedPerSecond":8688,"totalBytesProcessed":4795,"totalLinesProcessed":15,"execTime":0.001726469,"queueTime":0.00007025,"subqueries":1,"totalEntriesReturned":10},"querier":{"store":{"totalChunksRef":0,"totalChunksDownloaded":0,"chunksDownloadTime":0,"chunk":{"headChunkBytes":0,"headChunkLines":0,"decompressedBytes":0,"decompressedLines":0,"compressedBytes":0,"totalDuplicates":0}}},"ingester":{"totalReached":1,"totalChunksMatched":1,"totalBatches":1,"totalLinesSent":10,"store":{"totalChunksRef":0,"totalChunksDownloaded":0,"chunksDownloadTime":0,"chunk":{"headChunkBytes":4795,"headChunkLines":15,"decompressedBytes":0,"decompressedLines":0,"compressedBytes":0,"totalDuplicates":0}}}}}}
Reference
https://github.com/kubernetes/ingress-nginx/tree/main/charts/ingress-nginx
https://github.com/kubernetes/ingress-nginx/blob/main/deploy/static/provider/baremetal/deploy.yaml
https://cloudworkmates.com/2021/06/08/running-ha-nginx-ingress-on-aws-eks-with-tlsaws-acm/
'Container Orchestration > Kubernetes' 카테고리의 다른 글
Kubernetes 생태계 표준화와 Container Interface(CRI, CSI, CNI) (0) | 2024.07.15 |
---|---|
Kubernetes Pod를 안전하게 종료하는 방법(cordon, uncordon, drain, scale) (0) | 2024.07.09 |
Kubernetes Volumes 및 StorageClass: CSI 드라이버 사용 가이드 (0) | 2024.04.28 |
Kubernetes Operator 및 Custom Resource Definitions(CRDs) 이해하기 (0) | 2024.04.24 |
Kubernetes Affinity 및 Scheduling 설정 가이드 (0) | 2024.04.19 |