环境概述
在 k8s-master01 节点上,通过执行以下命令获取了当前Kubernetes集群中 ingress-nginx 命名空间下的Helm部署状态及Kubernetes版本信息:
[root@k8s-master01 ~]# helm ls -n ingress-nginx
NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION
ingress-nginx ingress-nginx 1 2025-07-21 11:54:27.64289018 +0800 CST deployed ingress-nginx-4.13.0 1.13.0此外,还检查了Kubernetes客户端和服务端的版本以及Kustomize版本,具体如下:
[root@k8s-master01 ~]# kubectl version
Client Version: v1.33.3
Kustomize Version: v5.6.0
Server Version: v1.33.3这表明Kubernetes客户端和服务端版本均为 v1.33.3,同时Kustomize版本为 v5.6.0。
目标
我们的目标是收集业务系统日志,以便进行图表展示和指标监控告警。为此,我们需要修改 ingress-nginx 的日志格式,使其更易于被日志收集工具识别和处理。
实现方式
为了实现这一目标,首先需要确认 ingress-nginx-controller 的启动命令是否包含特定的配置映射参数。请检查该控制器的启动命令,确保它包含了以下部分:
--configmap=$(POD_NAMESPACE)/ingress-nginx-controller这个参数指定了 ingress-nginx-controller 使用的配置映射,其中包含了各种配置选项,包括日志格式。如果此参数存在,则可以通过编辑相应的ConfigMap来调整日志格式。如果不存在,则可能需要通过其他方式(如修改Deployment或DaemonSet)来添加或更新此参数。
步骤:
确认启动命令:使用
kubectl命令查看ingress-nginx-controller的启动命令。
[root@k8s-master01 ~]# kubectl get pods -n ingress-nginx
NAME READY STATUS RESTARTS AGE
ingress-nginx-controller-6d8cbd46b5-t9l7f 1/1 Running 0 12d
[root@k8s-master01 ~]# kubectl get pod ingress-nginx-controller-6d8cbd46b5-t9l7f -n ingress-nginx -o jsonpath='{.spec.containers[0].command} {.spec.containers[0].args}'
["/nginx-ingress-controller","--publish-service=$(POD_NAMESPACE)/ingress-nginx-controller","--election-id=ingress-nginx-leader","--controller-class=k8s.io/ingress-nginx","--ingress-class=nginx","--configmap=$(POD_NAMESPACE)/ingress-nginx-controller","--validating-webhook=:8443","--validating-webhook-certificate=/usr/local/certificates/cert","--validating-webhook-key=/usr/local/certificates/key"]编辑ConfigMap:如果启动命令中包含
--configmap=$(POD_NAMESPACE)/ingress-nginx-controller,则编辑对应的ConfigMap以修改日志格式。
kubectl edit configmap ingress-nginx-controller -n ingress-nginx
apiVersion: v1
data:
http-snippet: >-
map "$time_iso8601 # $msec" $time_iso8601_ms {"~(^[^+]+)(\+[0-9:]+) #
\d+\.(\d+)$" $1.$3$2;}
log-format-upstream: >-
{"timestamp":"$time_iso8601_ms","server_ip":"$server_addr","remote_ip":"$remote_addr","xff":"$http_x_forwarded_for","remote_user":"$remote_user","domain":"$host","url":"$request_uri","referer":"$http_referer","upstreamtime":"$upstream_response_time","responsetime":"$request_time","request_method":"$request_method","status":"$status","response_length":"$bytes_sent","request_length":"$request_length","protocol":"$server_protocol","upstreamhost":"$upstream_addr","http_user_agent":"$http_user_agent"}
kind: ConfigMap
metadata:
annotations:
meta.helm.sh/release-name: ingress-nginx
meta.helm.sh/release-namespace: ingress-nginx
creationTimestamp: '2025-07-21T03:54:32Z'
labels:
app.kubernetes.io/component: controller
app.kubernetes.io/instance: ingress-nginx
app.kubernetes.io/managed-by: Helm
app.kubernetes.io/name: ingress-nginx
app.kubernetes.io/part-of: ingress-nginx
app.kubernetes.io/version: 1.13.0
helm.sh/chart: ingress-nginx-4.13.0
managedFields:
- apiVersion: v1
fieldsType: FieldsV1
fieldsV1:
f:metadata:
f:annotations:
.: {}
f:meta.helm.sh/release-name: {}
f:meta.helm.sh/release-namespace: {}
f:labels:
.: {}
f:app.kubernetes.io/component: {}
f:app.kubernetes.io/instance: {}
f:app.kubernetes.io/managed-by: {}
f:app.kubernetes.io/name: {}
f:app.kubernetes.io/part-of: {}
f:app.kubernetes.io/version: {}
f:helm.sh/chart: {}
manager: helm
operation: Update
time: '2025-07-21T03:54:32Z'
- apiVersion: v1
fieldsType: FieldsV1
fieldsV1:
f:data:
.: {}
f:http-snippet: {}
f:log-format-upstream: {}
manager: agent
operation: Update
time: '2025-09-13T10:34:19Z'
name: ingress-nginx-controller
namespace: ingress-nginx
resourceVersion: '11734961'
uid: 56637872-c797-4a25-9662-a09528eec094然后重启ingress生效配置。
kubectl rollout restart deploy ingress-nginx-controller -n ingress-nginx