kubernetes - 检查应用于 kubernetes 集群上的 nginx 入口 Controller 的配置

标签 kubernetes kubernetes-ingress nginx-config nginx-ingress

我在数据属性下设置了 nginx 入口 Controller 配置,如下面的 yaml 文件所示。

  1. 我想知道这是设置 nginx 配置而不是提供 nginx.conf 文件的正确方法吗。

  2. 其次,我想知道是否设置了提供的配置。要确定是否应用了新配置,我应该执行到 pod 中并运行 nginx -T 还是有任何其他方法可以找到它?

kind: ConfigMap
apiVersion: v1
metadata:
  name: nginx-configuration
  namespace: ingress-nginx
  labels:
    app.kubernetes.io/name: ingress-nginx
    app.kubernetes.io/part-of: ingress-nginx
data:
  worker-processes: "24"
  worker-connections: "100000"
  worker-rlimit-nofile: "102400"
  worker-cpu-affinity: "auto 111111111111111111111111"
  keepalive: "200"
  main-template: | 
   user nginx;
   worker_processes  {{.WorkerProcesses}};
   {{- if .WorkerRlimitNofile}}
   worker_rlimit_nofile {{.WorkerRlimitNofile}};{{end}}
   {{- if .WorkerCPUAffinity}}
   worker_cpu_affinity {{.WorkerCPUAffinity}};{{end}}
   {{- if .WorkerShutdownTimeout}}
   worker_shutdown_timeout {{.WorkerShutdownTimeout}};{{end}}
   daemon off;

   error_log  /var/log/nginx/error.log {{.ErrorLogLevel}};
   pid        /var/run/nginx.pid;

   {{- if .MainSnippets}}
   {{range $value := .MainSnippets}}
   {{$value}}{{end}}
   {{- end}}

   events {
       worker_connections  {{.WorkerConnections}};
   }

   http {
       include       /etc/nginx/mime.types;
       default_type  application/octet-stream;
       
       ...
      

       sendfile        on;
       access_log  off;
       tcp_nopush  on;
       tcp_nodelay on;

       keepalive_timeout  315;
       keepalive_requests 10000000;

       #gzip  on;   
        ...
   }

---
kind: ConfigMap
apiVersion: v1
metadata:
  name: tcp-services
  namespace: ingress-nginx
  labels:
    app.kubernetes.io/name: ingress-nginx
    app.kubernetes.io/part-of: ingress-nginx

---
kind: ConfigMap
apiVersion: v1
metadata:
  name: udp-services
  namespace: ingress-nginx
  labels:
    app.kubernetes.io/name: ingress-nginx
    app.kubernetes.io/part-of: ingress-nginx

---
apiVersion: v1
kind: ServiceAccount
metadata:
  name: nginx-ingress-serviceaccount
  namespace: ingress-nginx
  labels:
    app.kubernetes.io/name: ingress-nginx
    app.kubernetes.io/part-of: ingress-nginx

最佳答案

安装 NGINX Ingress Controller 的方法有很多种,但是它们取决于它们部署的环境。 例如对于 minikube:

迷你库

对于标准用法:

minikube 插件启用入口

要检查入口 Controller pod 是否已启动,请运行以下命令:

$ kubectl get pods -n ingress-nginx\-l app.kubernetes.io/name=ingress-nginx --watch

您可以使用 helm(但仅限于 v3):

NGINX Ingress controller 可以通过 Helm 安装使用项目存储库中的图表。使用版本名称 ingress-nginx 安装图表:

$ helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
$ helm repo update
$ helm install ingress-nginx ingress-nginx/ingress-nginx

然后尝试检测安装的版本:

POD_NAME=$(kubectl get pods -l app.kubernetes.io/name=ingress-nginx -o jsonpath='{.items[0].metadata.name}') kubectl exec -it $POD_NAME --/nginx-ingress-controller --version

然而,最常见的方法是使用 Kubernetes list 在 Kubernetes 集群中安装 NGINX Ingress Controller,然后修改 nginx-config.yaml

总结:您必须修改 nginx.conf 文件。您提供了清晰的规范,然后您就可以轻松地对其进行调试。

阅读更多:nginx-ingress-controller-installation-manifest , nginx-ingress-controller .

即使在进行故障排除时,您也有检查 nginx.conf 文件的示例。 例如,要检查 Ingress Controller,您可以:

  • 检查入口资源事件

    $ kubectl get ing -n <namespace-of-ingress-resource> NAME 
    $ kubectl describe ing <ingress-resource-name> -n <namespace-of-ingress-resource>
    
  • 检查入口 Controller 日志

      $ kubectl get pods -n <namespace-of-ingress-controller> 
      $ kubectl logs -n <namespace> nginx-ingress-controller
    
  • 检查 Nginx 配置

       $ kubectl get pods -n <namespace-of-ingress-controller>   
       $ kubectl exec -it -n <namespace-of-ingress-controller> nginx-ingress-controller -- cat /etc/nginx/nginx.conf
    
  • 检查使用的服务是否存在

      $ kubectl get svc --all-namespaces
    

查看更多:ingress-troubleshooting .

关于kubernetes - 检查应用于 kubernetes 集群上的 nginx 入口 Controller 的配置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65753988/

相关文章:

kubernetes - kube-proxy 的可扩展性

.net - GKE 中的 dotnet 应用程序与 nginx 入口 Controller 和代理

kubernetes - 在 Kubernetes Persistent Volume 中创建目录

kubernetes - 将 Kubernetes 卷限制为单个 Pod

proxy - Ingress Controller (Traefik) 和 Kubernetes 上的后端服务之间的安全通信

postgresql - 安装 kong-ingress-controller 来管理 kubernetes 上的 ingress

docker - 当挂载/etc/nginx/container 不运行

ssl - Cert-Manager 证书更新流程 - 如何执行?

go - nginx 502 错误始终存在,没有应用程序错误

nginx - 如何增加Nginx服务器上传图片的大小?