Administrator
发布于 2025-09-26 / 4 阅读
0
0

ingress-nginx 配置日志格式

环境概述

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)来添加或更新此参数。

步骤:

  1. 确认启动命令:使用 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"]
  1. 编辑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
  1. 然后重启ingress生效配置。

kubectl rollout restart deploy ingress-nginx-controller -n ingress-nginx


评论