125 lines
47 KiB
HTML
125 lines
47 KiB
HTML
<!doctype html><html lang=en class=no-js> <head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1"><link href=https://kubernetes.github.io/ingress-nginx/user-guide/monitoring/ rel=canonical><link rel="shortcut icon" href=../../assets/images/favicon.png><meta name=generator content="mkdocs-1.1.2, mkdocs-material-6.2.4"><title>Prometheus and Grafana installation - NGINX Ingress Controller</title><link rel=stylesheet href=../../assets/stylesheets/main.15aa0b43.min.css><link rel=stylesheet href=../../assets/stylesheets/palette.75751829.min.css><meta name=theme-color content=#009485><link rel=preconnect href=https://fonts.gstatic.com crossorigin><link rel=stylesheet href="https://fonts.googleapis.com/css?family=Roboto:300,400,400i,700%7CRoboto+Mono&display=fallback"><style>body,input{font-family:"Roboto",-apple-system,BlinkMacSystemFont,Helvetica,Arial,sans-serif}code,kbd,pre{font-family:"Roboto Mono",SFMono-Regular,Consolas,Menlo,monospace}</style><link rel=stylesheet href=../../extra.css><script>window.ga=window.ga||function(){(ga.q=ga.q||[]).push(arguments)},ga.l=+new Date,ga("create","UA-118407822-1","kubernetes.github.io"),ga("set","anonymizeIp",!0),ga("send","pageview"),document.addEventListener("DOMContentLoaded",function(){document.forms.search&&document.forms.search.query.addEventListener("blur",function(){if(this.value){var e=document.location.pathname;ga("send","pageview",e+"?q="+this.value)}})}),document.addEventListener("DOMContentSwitch",function(){ga("send","pageview",document.location.pathname)})</script><script async src=https://www.google-analytics.com/analytics.js></script></head> <body dir=ltr data-md-color-scheme data-md-color-primary=teal data-md-color-accent=green> <input class=md-toggle data-md-toggle=drawer type=checkbox id=__drawer autocomplete=off> <input class=md-toggle data-md-toggle=search type=checkbox id=__search autocomplete=off> <label class=md-overlay for=__drawer></label> <div data-md-component=skip> <a href=#prometheus-and-grafana-installation class=md-skip> Skip to content </a> </div> <div data-md-component=announce> </div> <header class=md-header data-md-component=header> <nav class="md-header-nav md-grid" aria-label=Header> <a href=https://kubernetes.github.io/ingress-nginx title="NGINX Ingress Controller" class="md-header-nav__button md-logo" aria-label="NGINX Ingress Controller"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 8a3 3 0 003-3 3 3 0 00-3-3 3 3 0 00-3 3 3 3 0 003 3m0 3.54C9.64 9.35 6.5 8 3 8v11c3.5 0 6.64 1.35 9 3.54 2.36-2.19 5.5-3.54 9-3.54V8c-3.5 0-6.64 1.35-9 3.54z"/></svg> </a> <label class="md-header-nav__button md-icon" for=__drawer> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M3 6h18v2H3V6m0 5h18v2H3v-2m0 5h18v2H3v-2z"/></svg> </label> <div class=md-header-nav__title data-md-component=header-title> <div class=md-header-nav__ellipsis> <div class=md-header-nav__topic> <span class=md-ellipsis> NGINX Ingress Controller </span> </div> <div class=md-header-nav__topic> <span class=md-ellipsis> Prometheus and Grafana installation </span> </div> </div> </div> <label class="md-header-nav__button md-icon" for=__search> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0116 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 019.5 16 6.5 6.5 0 013 9.5 6.5 6.5 0 019.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5z"/></svg> </label> <div class=md-search data-md-component=search role=dialog> <label class=md-search__overlay for=__search></label> <div class=md-search__inner role=search> <form class=md-search__form name=search> <input type=text class=md-search__input name=query aria-label=Search placeholder=Search autocapitalize=off autocorrect=off autocomplete=off spellcheck=false data-md-component=search-query data-md-state=active required> <label class="md-search__icon md-icon" for=__search> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0116 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 019.5 16 6.5 6.5 0 013 9.5 6.5 6.5 0 019.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5z"/></svg> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12z"/></svg> </label> <button type=reset class="md-search__icon md-icon" aria-label=Clear data-md-component=search-reset tabindex=-1> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41z"/></svg> </button> </form> <div class=md-search__output> <div class=md-search__scrollwrap data-md-scrollfix> <div class=md-search-result data-md-component=search-result> <div class=md-search-result__meta> Initializing search </div> <ol class=md-search-result__list></ol> </div> </div> </div> </div> </div> <div class=md-header-nav__source> <a href=https://github.com/kubernetes/ingress-nginx/ title="Go to repository" class=md-source> <div class="md-source__icon md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><path d="M439.55 236.05L244 40.45a28.87 28.87 0 00-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 01-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 000 40.81l195.61 195.6a28.86 28.86 0 0040.8 0l194.69-194.69a28.86 28.86 0 000-40.81z"/></svg> </div> <div class=md-source__repository> kubernetes/ingress-nginx </div> </a> </div> </nav> </header> <div class=md-container data-md-component=container> <nav class=md-tabs aria-label=Tabs data-md-component=tabs> <div class="md-tabs__inner md-grid"> <ul class=md-tabs__list> <li class=md-tabs__item> <a href=../.. class=md-tabs__link> Welcome </a> </li> <li class=md-tabs__item> <a href=../../deploy/ class=md-tabs__link> Deployment </a> </li> <li class=md-tabs__item> <a href=../nginx-configuration/ class="md-tabs__link md-tabs__link--active"> User guide </a> </li> <li class=md-tabs__item> <a href=../../examples/ class=md-tabs__link> Examples </a> </li> <li class=md-tabs__item> <a href=../../developer-guide/getting-started/ class=md-tabs__link> Developer Guide </a> </li> </ul> </div> </nav> <main class=md-main data-md-component=main> <div class="md-main__inner md-grid"> <div class="md-sidebar md-sidebar--primary" data-md-component=navigation> <div class=md-sidebar__scrollwrap> <div class=md-sidebar__inner> <nav class="md-nav md-nav--primary md-nav--lifted" aria-label=Navigation data-md-level=0> <label class=md-nav__title for=__drawer> <a href=https://kubernetes.github.io/ingress-nginx title="NGINX Ingress Controller" class="md-nav__button md-logo" aria-label="NGINX Ingress Controller"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 8a3 3 0 003-3 3 3 0 00-3-3 3 3 0 00-3 3 3 3 0 003 3m0 3.54C9.64 9.35 6.5 8 3 8v11c3.5 0 6.64 1.35 9 3.54 2.36-2.19 5.5-3.54 9-3.54V8c-3.5 0-6.64 1.35-9 3.54z"/></svg> </a> NGINX Ingress Controller </label> <div class=md-nav__source> <a href=https://github.com/kubernetes/ingress-nginx/ title="Go to repository" class=md-source> <div class="md-source__icon md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><path d="M439.55 236.05L244 40.45a28.87 28.87 0 00-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 01-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 000 40.81l195.61 195.6a28.86 28.86 0 0040.8 0l194.69-194.69a28.86 28.86 0 000-40.81z"/></svg> </div> <div class=md-source__repository> kubernetes/ingress-nginx </div> </a> </div> <ul class=md-nav__list data-md-scrollfix> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle" data-md-toggle=nav-1 type=checkbox id=nav-1> <label class=md-nav__link for=nav-1> Welcome <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav aria-label=Welcome data-md-level=1> <label class=md-nav__title for=nav-1> <span class="md-nav__icon md-icon"></span> Welcome </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../.. class=md-nav__link> Welcome </a> </li> <li class=md-nav__item> <a href=../../how-it-works/ class=md-nav__link> How it works </a> </li> <li class=md-nav__item> <a href=../../troubleshooting/ class=md-nav__link> Troubleshooting </a> </li> <li class=md-nav__item> <a href=../../kubectl-plugin/ class=md-nav__link> kubectl plugin </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle" data-md-toggle=nav-2 type=checkbox id=nav-2> <label class=md-nav__link for=nav-2> Deployment <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav aria-label=Deployment data-md-level=1> <label class=md-nav__title for=nav-2> <span class="md-nav__icon md-icon"></span> Deployment </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../deploy/ class=md-nav__link> Installation Guide </a> </li> <li class=md-nav__item> <a href=../../deploy/baremetal/ class=md-nav__link> Bare-metal considerations </a> </li> <li class=md-nav__item> <a href=../../deploy/rbac/ class=md-nav__link> Role Based Access Control (RBAC) </a> </li> <li class=md-nav__item> <a href=../../deploy/upgrade/ class=md-nav__link> Upgrade </a> </li> <li class=md-nav__item> <a href=../../deploy/hardening-guide/ class=md-nav__link> Hardening guide </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--active md-nav__item--nested"> <input class="md-nav__toggle md-toggle" data-md-toggle=nav-3 type=checkbox id=nav-3 checked> <label class=md-nav__link for=nav-3> User guide <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav aria-label="User guide" data-md-level=1> <label class=md-nav__title for=nav-3> <span class="md-nav__icon md-icon"></span> User guide </label> <ul class=md-nav__list data-md-scrollfix> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle" data-md-toggle=nav-3-1 type=checkbox id=nav-3-1> <label class=md-nav__link for=nav-3-1> NGINX Configuration <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav aria-label="NGINX Configuration" data-md-level=2> <label class=md-nav__title for=nav-3-1> <span class="md-nav__icon md-icon"></span> NGINX Configuration </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../nginx-configuration/ class=md-nav__link> Introduction </a> </li> <li class=md-nav__item> <a href=../basic-usage/ class=md-nav__link> Basic usage </a> </li> <li class=md-nav__item> <a href=../nginx-configuration/annotations/ class=md-nav__link> Annotations </a> </li> <li class=md-nav__item> <a href=../nginx-configuration/configmap/ class=md-nav__link> ConfigMap </a> </li> <li class=md-nav__item> <a href=../nginx-configuration/custom-template/ class=md-nav__link> Custom NGINX template </a> </li> <li class=md-nav__item> <a href=../nginx-configuration/log-format/ class=md-nav__link> Log format </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=../cli-arguments/ class=md-nav__link> Command line arguments </a> </li> <li class=md-nav__item> <a href=../custom-errors/ class=md-nav__link> Custom errors </a> </li> <li class=md-nav__item> <a href=../default-backend/ class=md-nav__link> Default backend </a> </li> <li class=md-nav__item> <a href=../exposing-tcp-udp-services/ class=md-nav__link> Exposing TCP and UDP services </a> </li> <li class=md-nav__item> <a href=../fcgi-services/ class=md-nav__link> Exposing FCGI services </a> </li> <li class=md-nav__item> <a href=../ingress-path-matching/ class=md-nav__link> Regular expressions in paths </a> </li> <li class=md-nav__item> <a href=../external-articles/ class=md-nav__link> External Articles </a> </li> <li class=md-nav__item> <a href=../miscellaneous/ class=md-nav__link> Miscellaneous </a> </li> <li class="md-nav__item md-nav__item--active"> <input class="md-nav__toggle md-toggle" data-md-toggle=toc type=checkbox id=__toc> <label class="md-nav__link md-nav__link--active" for=__toc> Prometheus and Grafana installation <span class="md-nav__icon md-icon"></span> </label> <a href=./ class="md-nav__link md-nav__link--active"> Prometheus and Grafana installation </a> <nav class="md-nav md-nav--secondary" aria-label="Table of contents"> <label class=md-nav__title for=__toc> <span class="md-nav__icon md-icon"></span> Table of contents </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=#prometheus-and-grafana-installation-using-pod-annotations class=md-nav__link> PROMETHEUS AND GRAFANA INSTALLATION USING POD ANNOTATIONS </a> <nav class=md-nav aria-label="PROMETHEUS AND GRAFANA INSTALLATION USING POD ANNOTATIONS"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#before-you-begin class=md-nav__link> Before You Begin </a> </li> <li class=md-nav__item> <a href=#deploy-and-configure-prometheus-server class=md-nav__link> Deploy and configure Prometheus Server </a> <nav class=md-nav aria-label="Deploy and configure Prometheus Server"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#prometheus-dashboard class=md-nav__link> Prometheus Dashboard </a> </li> <li class=md-nav__item> <a href=#grafana class=md-nav__link> Grafana </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#caveats class=md-nav__link> Caveats </a> <nav class=md-nav aria-label=Caveats> <ul class=md-nav__list> <li class=md-nav__item> <a href=#wildcard-ingresses class=md-nav__link> Wildcard ingresses </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#grafana-dashboard-using-ingress-resource class=md-nav__link> Grafana dashboard using ingress resource </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#prometheus-and-grafana-installation-using-service-monitors class=md-nav__link> PROMETHEUS AND GRAFANA INSTALLATION USING SERVICE MONITORS </a> <nav class=md-nav aria-label="PROMETHEUS AND GRAFANA INSTALLATION USING SERVICE MONITORS"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#verify-nginx-ingress-controller-is-installed class=md-nav__link> Verify NGINX Ingress controller is installed </a> </li> <li class=md-nav__item> <a href=#verify-prometheus-is-installed class=md-nav__link> Verify Prometheus is installed </a> </li> <li class=md-nav__item> <a href=#re-configure-nginx-ingress-controller class=md-nav__link> Re-configure NGINX Ingress controller </a> </li> <li class=md-nav__item> <a href=#configure-prometheus class=md-nav__link> Configure Prometheus </a> </li> <li class=md-nav__item> <a href=#connect-and-view-prometheus-dashboard class=md-nav__link> Connect and view Prometheus dashboard </a> </li> <li class=md-nav__item> <a href=#connect-and-view-grafana-dashboard class=md-nav__link> Connect and view Grafana dashboard </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=../multiple-ingress/ class=md-nav__link> Multiple Ingress controllers </a> </li> <li class=md-nav__item> <a href=../tls/ class=md-nav__link> TLS/HTTPS </a> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle" data-md-toggle=nav-3-13 type=checkbox id=nav-3-13> <label class=md-nav__link for=nav-3-13> Third party addons <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav aria-label="Third party addons" data-md-level=2> <label class=md-nav__title for=nav-3-13> <span class="md-nav__icon md-icon"></span> Third party addons </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../third-party-addons/modsecurity/ class=md-nav__link> ModSecurity Web Application Firewall </a> </li> <li class=md-nav__item> <a href=../third-party-addons/opentracing/ class=md-nav__link> OpenTracing </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle" data-md-toggle=nav-4 type=checkbox id=nav-4> <label class=md-nav__link for=nav-4> Examples <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav aria-label=Examples data-md-level=1> <label class=md-nav__title for=nav-4> <span class="md-nav__icon md-icon"></span> Examples </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../examples/ class=md-nav__link> Introduction </a> </li> <li class=md-nav__item> <a href=../../examples/PREREQUISITES/ class=md-nav__link> Prerequisites </a> </li> <li class=md-nav__item> <a href=../../examples/affinity/cookie/ class=md-nav__link> Sticky Sessions </a> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle" data-md-toggle=nav-4-4 type=checkbox id=nav-4-4> <label class=md-nav__link for=nav-4-4> Auth <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav aria-label=Auth data-md-level=2> <label class=md-nav__title for=nav-4-4> <span class="md-nav__icon md-icon"></span> Auth </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../examples/auth/basic/ class=md-nav__link> Basic Authentication </a> </li> <li class=md-nav__item> <a href=../../examples/auth/client-certs/ class=md-nav__link> Client Certificate Authentication </a> </li> <li class=md-nav__item> <a href=../../examples/auth/external-auth/ class=md-nav__link> External Basic Authentication </a> </li> <li class=md-nav__item> <a href=../../examples/auth/oauth-external-auth/ class=md-nav__link> External OAUTH Authentication </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle" data-md-toggle=nav-4-5 type=checkbox id=nav-4-5> <label class=md-nav__link for=nav-4-5> Customization <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav aria-label=Customization data-md-level=2> <label class=md-nav__title for=nav-4-5> <span class="md-nav__icon md-icon"></span> Customization </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../examples/customization/configuration-snippets/ class=md-nav__link> Configuration Snippets </a> </li> <li class=md-nav__item> <a href=../../examples/customization/custom-configuration/ class=md-nav__link> Custom Configuration </a> </li> <li class=md-nav__item> <a href=../../examples/customization/custom-errors/ class=md-nav__link> Custom Errors </a> </li> <li class=md-nav__item> <a href=../../examples/customization/custom-headers/ class=md-nav__link> Custom Headers </a> </li> <li class=md-nav__item> <a href=../../examples/customization/external-auth-headers/ class=md-nav__link> External authentication </a> </li> <li class=md-nav__item> <a href=../../examples/customization/ssl-dh-param/ class=md-nav__link> Custom DH parameters for perfect forward secrecy </a> </li> <li class=md-nav__item> <a href=../../examples/customization/sysctl/ class=md-nav__link> Sysctl tuning </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=../../examples/docker-registry/ class=md-nav__link> Docker registry </a> </li> <li class=md-nav__item> <a href=../../examples/grpc/ class=md-nav__link> gRPC </a> </li> <li class=md-nav__item> <a href=../../examples/multi-tls/ class=md-nav__link> Multi TLS certificate termination </a> </li> <li class=md-nav__item> <a href=../../examples/rewrite/ class=md-nav__link> Rewrite </a> </li> <li class=md-nav__item> <a href=../../examples/static-ip/ class=md-nav__link> Static IPs </a> </li> <li class=md-nav__item> <a href=../../examples/tls-termination/ class=md-nav__link> TLS termination </a> </li> <li class=md-nav__item> <a href=../../examples/psp/ class=md-nav__link> Pod Security Policy (PSP) </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle" data-md-toggle=nav-5 type=checkbox id=nav-5> <label class=md-nav__link for=nav-5> Developer Guide <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav aria-label="Developer Guide" data-md-level=1> <label class=md-nav__title for=nav-5> <span class="md-nav__icon md-icon"></span> Developer Guide </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../developer-guide/getting-started/ class=md-nav__link> Getting Started </a> </li> <li class=md-nav__item> <a href=../../developer-guide/code-overview/ class=md-nav__link> Code Overview </a> </li> </ul> </nav> </li> </ul> </nav> </div> </div> </div> <div class="md-sidebar md-sidebar--secondary" data-md-component=toc> <div class=md-sidebar__scrollwrap> <div class=md-sidebar__inner> <nav class="md-nav md-nav--secondary" aria-label="Table of contents"> <label class=md-nav__title for=__toc> <span class="md-nav__icon md-icon"></span> Table of contents </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=#prometheus-and-grafana-installation-using-pod-annotations class=md-nav__link> PROMETHEUS AND GRAFANA INSTALLATION USING POD ANNOTATIONS </a> <nav class=md-nav aria-label="PROMETHEUS AND GRAFANA INSTALLATION USING POD ANNOTATIONS"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#before-you-begin class=md-nav__link> Before You Begin </a> </li> <li class=md-nav__item> <a href=#deploy-and-configure-prometheus-server class=md-nav__link> Deploy and configure Prometheus Server </a> <nav class=md-nav aria-label="Deploy and configure Prometheus Server"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#prometheus-dashboard class=md-nav__link> Prometheus Dashboard </a> </li> <li class=md-nav__item> <a href=#grafana class=md-nav__link> Grafana </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#caveats class=md-nav__link> Caveats </a> <nav class=md-nav aria-label=Caveats> <ul class=md-nav__list> <li class=md-nav__item> <a href=#wildcard-ingresses class=md-nav__link> Wildcard ingresses </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#grafana-dashboard-using-ingress-resource class=md-nav__link> Grafana dashboard using ingress resource </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#prometheus-and-grafana-installation-using-service-monitors class=md-nav__link> PROMETHEUS AND GRAFANA INSTALLATION USING SERVICE MONITORS </a> <nav class=md-nav aria-label="PROMETHEUS AND GRAFANA INSTALLATION USING SERVICE MONITORS"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#verify-nginx-ingress-controller-is-installed class=md-nav__link> Verify NGINX Ingress controller is installed </a> </li> <li class=md-nav__item> <a href=#verify-prometheus-is-installed class=md-nav__link> Verify Prometheus is installed </a> </li> <li class=md-nav__item> <a href=#re-configure-nginx-ingress-controller class=md-nav__link> Re-configure NGINX Ingress controller </a> </li> <li class=md-nav__item> <a href=#configure-prometheus class=md-nav__link> Configure Prometheus </a> </li> <li class=md-nav__item> <a href=#connect-and-view-prometheus-dashboard class=md-nav__link> Connect and view Prometheus dashboard </a> </li> <li class=md-nav__item> <a href=#connect-and-view-grafana-dashboard class=md-nav__link> Connect and view Grafana dashboard </a> </li> </ul> </nav> </li> </ul> </nav> </div> </div> </div> <div class=md-content> <article class="md-content__inner md-typeset"> <a href=https://github.com/kubernetes/ingress-nginx/edit/main/docs/user-guide/monitoring.md title="Edit this page" class="md-content__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M20.71 7.04c.39-.39.39-1.04 0-1.41l-2.34-2.34c-.37-.39-1.02-.39-1.41 0l-1.84 1.83 3.75 3.75M3 17.25V21h3.75L17.81 9.93l-3.75-3.75L3 17.25z"/></svg> </a> <h1 id=prometheus-and-grafana-installation>Prometheus and Grafana installation<a class=headerlink href=#prometheus-and-grafana-installation title="Permanent link"> ¶</a></h1> <p>Two different methods to install and configure Prometheus and Grafana are described in this doc. - Prometheus and Grafana installation using Pod Annotations. This installs Prometheus and Grafana in the same namespace as NGINX Ingress - Prometheus and Grafana installation using Service Monitors. This installs Prometheus and Grafana in two different namespaces. This is the preferred method, and helm charts supports this by default. </p> <h2 id=prometheus-and-grafana-installation-using-pod-annotations>PROMETHEUS AND GRAFANA INSTALLATION USING POD ANNOTATIONS<a class=headerlink href=#prometheus-and-grafana-installation-using-pod-annotations title="Permanent link"> ¶</a></h2> <p>This tutorial will show you how to install <a href=https://prometheus.io/ >Prometheus</a> and <a href=https://grafana.com/ >Grafana</a> for scraping the metrics of the NGINX Ingress controller.</p> <div class="admonition important"> <p class=admonition-title>Important</p> <p>This example uses <code>emptyDir</code> volumes for Prometheus and Grafana. This means once the pod gets terminated you will lose all the data.</p> </div> <h3 id=before-you-begin>Before You Begin<a class=headerlink href=#before-you-begin title="Permanent link"> ¶</a></h3> <ul> <li> <p>The NGINX Ingress controller should already be deployed according to the deployment instructions <a href=../../deploy/ >here</a>.</p> </li> <li> <p>The controller should be configured for exporting metrics. This requires 3 configurations to the controller. These configurations are :</p> </li> <li>controller.metrics.enabled=true</li> <li>controller.podAnnotations."prometheus.io/scrape"="true"</li> <li> <p>controller.podAnnotations."prometheus.io/port"="10254"</p> </li> <li> <p>The easiest way to configure the controller for metrics is via helm upgrade. Assuming you have installed the ingress-nginx controller as a helm release named ingress-controller, then you can simply type the command show below : <div class=highlight><pre><span></span><code>helm upgrade ingress-nginx ingress-nginx \
|
|
--repo https://kubernetes.github.io/ingress-nginx \
|
|
--namespace ingress-nginx \
|
|
--set controller.metrics.enabled=true \
|
|
--set-string controller.podAnnotations."prometheus\.io/scrape"="true" \
|
|
--set-string controller.podAnnotations."prometheus\.io/port"="10254"
|
|
</code></pre></div></p> </li> <li>You can validate that the controller is configured for metrics by looking at the values of the installed release, like this: <div class=highlight><pre><span></span><code>helm get values ingress-controller --namespace ingress-nginx
|
|
</code></pre></div></li> <li>You should be able to see the values shown below: <div class=highlight><pre><span></span><code>..
|
|
controller:
|
|
metrics:
|
|
enabled: true
|
|
service:
|
|
annotations:
|
|
prometheus.io/port: "10254"
|
|
prometheus.io/scrape: "true"
|
|
..
|
|
</code></pre></div></li> <li>If you are <strong>not using helm</strong>, you will have to edit your manifests like this:<ul> <li>Service manifest: <div class=highlight><pre><span></span><code>apiVersion: v1
|
|
kind: Service
|
|
metadata:
|
|
annotations:
|
|
prometheus.io/scrape: "true"
|
|
prometheus.io/port: "10254"
|
|
..
|
|
spec:
|
|
ports:
|
|
- name: prometheus
|
|
port: 10254
|
|
targetPort: prometheus
|
|
..
|
|
</code></pre></div></li> <li>Deployment manifest: <div class=highlight><pre><span></span><code>apiVersion: v1
|
|
kind: Deployment
|
|
metadata:
|
|
annotations:
|
|
prometheus.io/scrape: "true"
|
|
prometheus.io/port: "10254"
|
|
..
|
|
spec:
|
|
ports:
|
|
- name: prometheus
|
|
containerPort: 10254
|
|
..
|
|
</code></pre></div></li> </ul> </li> </ul> <h3 id=deploy-and-configure-prometheus-server>Deploy and configure Prometheus Server<a class=headerlink href=#deploy-and-configure-prometheus-server title="Permanent link"> ¶</a></h3> <p>Note that the kustomize bases used in this tutorial are stored in the <a href=https://github.com/kubernetes/ingress-nginx/tree/main/deploy>deploy</a> folder of the GitHub repository <a href=https://github.com/kubernetes/ingress-nginx>kubernetes/ingress-nginx</a>.</p> <ul> <li> <p>The Prometheus server must be configured so that it can discover endpoints of services. If a Prometheus server is already running in the cluster and if it is configured in a way that it can find the ingress controller pods, no extra configuration is needed.</p> </li> <li> <p>If there is no existing Prometheus server running, the rest of this tutorial will guide you through the steps needed to deploy a properly configured Prometheus server.</p> </li> <li> <p>Running the following command deploys prometheus in Kubernetes:</p> </li> </ul> <div class=highlight><pre><span></span><code>kubectl apply --kustomize github.com/kubernetes/ingress-nginx/deploy/prometheus/
|
|
</code></pre></div> <h4 id=prometheus-dashboard>Prometheus Dashboard<a class=headerlink href=#prometheus-dashboard title="Permanent link"> ¶</a></h4> <ul> <li>Open Prometheus dashboard in a web browser:</li> </ul> <div class=highlight><pre><span></span><code><span class=go>kubectl get svc -n ingress-nginx</span>
|
|
<span class=go>NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE</span>
|
|
<span class=go>default-http-backend ClusterIP 10.103.59.201 <none> 80/TCP 3d</span>
|
|
<span class=go>ingress-nginx NodePort 10.97.44.72 <none> 80:30100/TCP,443:30154/TCP,10254:32049/TCP 5h</span>
|
|
<span class=go>prometheus-server NodePort 10.98.233.86 <none> 9090:32630/TCP 1m</span>
|
|
</code></pre></div> <ul> <li>Obtain the IP address of the nodes in the running cluster:</li> </ul> <div class=highlight><pre><span></span><code><span class=go>kubectl get nodes -o wide</span>
|
|
</code></pre></div> <ul> <li>In some cases where the node only have internal IP addresses we need to execute:</li> </ul> <div class=highlight><pre><span></span><code>kubectl get nodes --selector=kubernetes.io/role!=master -o jsonpath={.items[*].status.addresses[?\(@.type==\"InternalIP\"\)].address}
|
|
10.192.0.2 10.192.0.3 10.192.0.4
|
|
</code></pre></div> <ul> <li> <p>Open your browser and visit the following URL: <em>http://{node IP address}:{prometheus-svc-nodeport}</em> to load the Prometheus Dashboard.</p> </li> <li> <p>According to the above example, this URL will be http://10.192.0.3:32630</p> </li> </ul> <p><img alt="Prometheus Dashboard" src=../../images/prometheus-dashboard.png></p> <h4 id=grafana>Grafana<a class=headerlink href=#grafana title="Permanent link"> ¶</a></h4> <ul> <li>Install grafana using the below command <div class=highlight><pre><span></span><code>kubectl apply --kustomize github.com/kubernetes/ingress-nginx/deploy/grafana/
|
|
</code></pre></div></li> <li> <p>Look at the services <div class=highlight><pre><span></span><code>kubectl get svc -n ingress-nginx
|
|
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
|
|
default-http-backend ClusterIP 10.103.59.201 <none> 80/TCP 3d
|
|
ingress-nginx NodePort 10.97.44.72 <none> 80:30100/TCP,443:30154/TCP,10254:32049/TCP 5h
|
|
prometheus-server NodePort 10.98.233.86 <none> 9090:32630/TCP 10m
|
|
grafana NodePort 10.98.233.87 <none> 3000:31086/TCP 10m
|
|
</code></pre></div></p> </li> <li> <p>Open your browser and visit the following URL: <em>http://{node IP address}:{grafana-svc-nodeport}</em> to load the Grafana Dashboard. According to the above example, this URL will be http://10.192.0.3:31086</p> </li> </ul> <p>The username and password is <code>admin</code></p> <ul> <li> <p>After the login you can import the Grafana dashboard from <a href=https://github.com/kubernetes/ingress-nginx/tree/main/deploy/grafana/dashboards>official dashboards</a>, by following steps given below :</p> <ul> <li>Navigate to lefthand panel of grafana</li> <li>Hover on the gearwheel icon for Configuration and click "Data Sources"</li> <li>Click "Add data source"</li> <li>Select "Prometheus"</li> <li>Enter the details (note: I used http://CLUSTER_IP_PROMETHEUS_SVC:9090)</li> <li>Left menu (hover over +) -> Dashboard</li> <li>Click "Import"</li> <li>Enter the copy pasted json from https://raw.githubusercontent.com/kubernetes/ingress-nginx/main/deploy/grafana/dashboards/nginx.json</li> <li>Click Import JSON</li> <li>Select the Prometheus data source</li> <li>Click "Import"</li> </ul> </li> </ul> <p><img alt="Grafana Dashboard" src=../../images/grafana.png></p> <h3 id=caveats>Caveats<a class=headerlink href=#caveats title="Permanent link"> ¶</a></h3> <h4 id=wildcard-ingresses>Wildcard ingresses<a class=headerlink href=#wildcard-ingresses title="Permanent link"> ¶</a></h4> <ul> <li>By default request metrics are labeled with the hostname. When you have a wildcard domain ingress, then there will be no metrics for that ingress (to prevent the metrics from exploding in cardinality). To get metrics in this case you need to run the ingress controller with <code>--metrics-per-host=false</code> (you will lose labeling by hostname, but still have labeling by ingress).</li> </ul> <h3 id=grafana-dashboard-using-ingress-resource>Grafana dashboard using ingress resource<a class=headerlink href=#grafana-dashboard-using-ingress-resource title="Permanent link"> ¶</a></h3> <ul> <li>If you want to expose the dashboard for grafana using a ingress resource, then you can : <ul> <li>change the service type of the prometheus-server service and the grafana service to "ClusterIP" like this : <div class=highlight><pre><span></span><code>kubectl -n ingress-nginx edit svc grafana
|
|
</code></pre></div></li> <li>This will open the currently deployed service grafana in the default editor configured in your shell (vi/nvim/nano/other)</li> <li>scroll down to line 34 that looks like "type: NodePort"</li> <li>change it to look like "type: ClusterIP". Save and exit.</li> <li>create a ingress resource with backend as "grafana" and port as "3000"</li> </ul> </li> <li>Similarly, you can edit the service "prometheus-server" and add a ingress resource.</li> </ul> <h2 id=prometheus-and-grafana-installation-using-service-monitors>PROMETHEUS AND GRAFANA INSTALLATION USING SERVICE MONITORS<a class=headerlink href=#prometheus-and-grafana-installation-using-service-monitors title="Permanent link"> ¶</a></h2> <p>This document assumes you're using helm and using the kube-prometheus-stack package to install Prometheus and Grafana. </p> <h3 id=verify-nginx-ingress-controller-is-installed>Verify NGINX Ingress controller is installed<a class=headerlink href=#verify-nginx-ingress-controller-is-installed title="Permanent link"> ¶</a></h3> <ul> <li> <p>The NGINX Ingress controller should already be deployed according to the deployment instructions <a href=../../deploy/ >here</a>.</p> </li> <li> <p>To check if Ingress controller is deployed, <div class=highlight><pre><span></span><code>kubectl get pods -n ingress-nginx
|
|
</code></pre></div></p> </li> <li>The result should look something like: <code>NAME READY STATUS RESTARTS AGE ingress-nginx-controller-7c489dc7b7-ccrf6 1/1 Running 0 19h</code></li> </ul> <h3 id=verify-prometheus-is-installed>Verify Prometheus is installed<a class=headerlink href=#verify-prometheus-is-installed title="Permanent link"> ¶</a></h3> <ul> <li>To check if Prometheus is already deployed, run the following command:</li> </ul> <p><div class=highlight><pre><span></span><code>helm ls -A
|
|
</code></pre></div> <div class=highlight><pre><span></span><code>NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION
|
|
ingress-nginx ingress-nginx 10 2022-01-20 18:08:55.267373 -0800 PST deployed ingress-nginx-4.0.16 1.1.1
|
|
prometheus prometheus 1 2022-01-20 16:07:25.086828 -0800 PST deployed kube-prometheus-stack-30.1.0 0.53.1
|
|
</code></pre></div> - Notice that prometheus is installed in a differenet namespace than ingress-nginx</p> <ul> <li>If prometheus is not installed, then you can install from <a href=https://artifacthub.io/packages/helm/prometheus-community/kube-prometheus-stack>here</a></li> </ul> <h3 id=re-configure-nginx-ingress-controller>Re-configure NGINX Ingress controller<a class=headerlink href=#re-configure-nginx-ingress-controller title="Permanent link"> ¶</a></h3> <ul> <li>The Ingress NGINX controller needs to be reconfigured for exporting metrics. This requires 3 additional configurations to the controller. These configurations are : <div class=highlight><pre><span></span><code>controller.metrics.enabled=true
|
|
controller.metrics.serviceMonitor.enabled=true
|
|
controller.metrics.serviceMonitor.additionalLabels.release="prometheus"
|
|
</code></pre></div></li> <li>The easiest way of doing this is to helm upgrade <div class=highlight><pre><span></span><code>helm upgrade ingress-nginx ingress-nginx/ingress-nginx \
|
|
--namespace ingress-nginx \
|
|
--set controller.metrics.enabled=true \
|
|
--set controller.metrics.serviceMonitor.enabled=true \
|
|
--set controller.metrics.serviceMonitor.additionalLabels.release="prometheus"
|
|
</code></pre></div></li> <li> <p>Here <code>controller.metrics.serviceMonitor.additionalLabels.release="prometheus"</code> should match the name of the helm release of the <code>kube-prometheus-stack</code></p> </li> <li> <p>You can validate that the controller has been successfully reconfigured to export metrics by looking at the values of the installed release, like this: <div class=highlight><pre><span></span><code>helm get values ingress-nginx --namespace ingress-nginx
|
|
</code></pre></div> <div class=highlight><pre><span></span><code>controller:
|
|
metrics:
|
|
enabled: true
|
|
serviceMonitor:
|
|
additionalLabels:
|
|
release: prometheus
|
|
enabled: true
|
|
</code></pre></div></p> </li> </ul> <h3 id=configure-prometheus>Configure Prometheus<a class=headerlink href=#configure-prometheus title="Permanent link"> ¶</a></h3> <ul> <li>Since Prometheus is running in a different namespace and not in the ingress-nginx namespace, it would not be able to discover ServiceMonitors in other namespaces when installed. Reconfigure your kube-prometheus-stack Helm installation to set <code>serviceMonitorSelectorNilUsesHelmValues</code> flag to false. By default, Prometheus only discovers PodMonitors within its own namespace. This should be disabled by setting <code>podMonitorSelectorNilUsesHelmValues</code> to false</li> <li>The configurations required are: <div class=highlight><pre><span></span><code>prometheus.prometheusSpec.podMonitorSelectorNilUsesHelmValues=false
|
|
prometheus.prometheusSpec.serviceMonitorSelectorNilUsesHelmValues=false
|
|
</code></pre></div></li> <li>The easiest way of doing this is to use <code>helm upgrade ...</code> <div class=highlight><pre><span></span><code>helm upgrade prometheus prometheus-community/kube-prometheus-stack \
|
|
--namespace prometheus \
|
|
--set prometheus.prometheusSpec.podMonitorSelectorNilUsesHelmValues=false \
|
|
--set prometheus.prometheusSpec.serviceMonitorSelectorNilUsesHelmValues=false
|
|
</code></pre></div></li> <li>You can validate that Prometheus has been reconfigured by looking at the values of the installed release, like this: <div class=highlight><pre><span></span><code>helm get values prometheus --namespace prometheus
|
|
</code></pre></div></li> <li>You should be able to see the values shown below: <div class=highlight><pre><span></span><code>prometheus:
|
|
prometheusSpec:
|
|
podMonitorSelectorNilUsesHelmValues: false
|
|
serviceMonitorSelectorNilUsesHelmValues: false
|
|
</code></pre></div></li> </ul> <h3 id=connect-and-view-prometheus-dashboard>Connect and view Prometheus dashboard<a class=headerlink href=#connect-and-view-prometheus-dashboard title="Permanent link"> ¶</a></h3> <ul> <li>Port forward to Prometheus service. Find out the name of the prometheus service by using the following command: <div class=highlight><pre><span></span><code>kubectl get svc -n prometheus
|
|
</code></pre></div></li> </ul> <p>The result of this command would look like: <div class=highlight><pre><span></span><code>NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
|
|
alertmanager-operated ClusterIP None <none> 9093/TCP,9094/TCP,9094/UDP 7h46m
|
|
prometheus-grafana ClusterIP 10.106.28.162 <none> 80/TCP 7h46m
|
|
prometheus-kube-prometheus-alertmanager ClusterIP 10.108.125.245 <none> 9093/TCP 7h46m
|
|
prometheus-kube-prometheus-operator ClusterIP 10.110.220.1 <none> 443/TCP 7h46m
|
|
prometheus-kube-prometheus-prometheus ClusterIP 10.102.72.134 <none> 9090/TCP 7h46m
|
|
prometheus-kube-state-metrics ClusterIP 10.104.231.181 <none> 8080/TCP 7h46m
|
|
prometheus-operated ClusterIP None <none> 9090/TCP 7h46m
|
|
prometheus-prometheus-node-exporter ClusterIP 10.96.247.128 <none> 9100/TCP 7h46m
|
|
</code></pre></div> prometheus-kube-prometheus-prometheus is the service we want to port forward to. We can do so using the following command: <div class=highlight><pre><span></span><code>kubectl port-forward svc/prometheus-kube-prometheus-prometheus -n prometheus 9090:9090
|
|
</code></pre></div> When you run the above command, you should see something like: <div class=highlight><pre><span></span><code>Forwarding from 127.0.0.1:9090 -> 9090
|
|
Forwarding from [::1]:9090 -> 9090
|
|
</code></pre></div> - Open your browser and visit the following URL http://localhost:{port-forwarded-port} according to the above example it would be, http://localhost:9090</p> <p><img alt="Prometheus Dashboard" src=../../images/prometheus-dashboard1.png></p> <h3 id=connect-and-view-grafana-dashboard>Connect and view Grafana dashboard<a class=headerlink href=#connect-and-view-grafana-dashboard title="Permanent link"> ¶</a></h3> <ul> <li>Port forward to Grafana service. Find out the name of the Grafana service by using the following command: <div class=highlight><pre><span></span><code>kubectl get svc -n prometheus
|
|
</code></pre></div></li> </ul> <p>The result of this command would look like: <div class=highlight><pre><span></span><code>NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
|
|
alertmanager-operated ClusterIP None <none> 9093/TCP,9094/TCP,9094/UDP 7h46m
|
|
prometheus-grafana ClusterIP 10.106.28.162 <none> 80/TCP 7h46m
|
|
prometheus-kube-prometheus-alertmanager ClusterIP 10.108.125.245 <none> 9093/TCP 7h46m
|
|
prometheus-kube-prometheus-operator ClusterIP 10.110.220.1 <none> 443/TCP 7h46m
|
|
prometheus-kube-prometheus-prometheus ClusterIP 10.102.72.134 <none> 9090/TCP 7h46m
|
|
prometheus-kube-state-metrics ClusterIP 10.104.231.181 <none> 8080/TCP 7h46m
|
|
prometheus-operated ClusterIP None <none> 9090/TCP 7h46m
|
|
prometheus-prometheus-node-exporter ClusterIP 10.96.247.128 <none> 9100/TCP 7h46m
|
|
</code></pre></div> prometheus-grafana is the service we want to port forward to. We can do so using the following command: <div class=highlight><pre><span></span><code>kubectl port-forward svc/prometheus-grafana 3000:80 -n prometheus
|
|
</code></pre></div> When you run the above command, you should see something like: <div class=highlight><pre><span></span><code>Forwarding from 127.0.0.1:3000 -> 3000
|
|
Forwarding from [::1]:3000 -> 3000
|
|
</code></pre></div> - Open your browser and visit the following URL http://localhost:{port-forwarded-port} according to the above example it would be, http://localhost:3000 The default username/ password is admin/prom-operator - After the login you can import the Grafana dashboard from <a href=https://github.com/kubernetes/ingress-nginx/tree/main/deploy/grafana/dashboards>official dashboards</a>, by following steps given below :</p> <ul> <li>Navigate to lefthand panel of grafana</li> <li>Hover on the gearwheel icon for Configuration and click "Data Sources"</li> <li>Click "Add data source"</li> <li>Select "Prometheus"</li> <li>Enter the details (note: I used http://10.102.72.134:9090 which is the CLUSTER-IP for Prometheus service)</li> <li>Left menu (hover over +) -> Dashboard</li> <li>Click "Import"</li> <li>Enter the copy pasted json from https://raw.githubusercontent.com/kubernetes/ingress-nginx/main/deploy/grafana/dashboards/nginx.json</li> <li>Click Import JSON</li> <li>Select the Prometheus data source</li> <li>Click "Import"</li> </ul> <p><img alt="Grafana Dashboard" src=../../images/grafana-dashboard1.png></p> </article> </div> </div> </main> <footer class=md-footer> <div class=md-footer-nav> <nav class="md-footer-nav__inner md-grid" aria-label=Footer> <a href=../miscellaneous/ class="md-footer-nav__link md-footer-nav__link--prev" rel=prev> <div class="md-footer-nav__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12z"/></svg> </div> <div class=md-footer-nav__title> <div class=md-ellipsis> <span class=md-footer-nav__direction> Previous </span> Miscellaneous </div> </div> </a> <a href=../multiple-ingress/ class="md-footer-nav__link md-footer-nav__link--next" rel=next> <div class=md-footer-nav__title> <div class=md-ellipsis> <span class=md-footer-nav__direction> Next </span> Multiple Ingress controllers </div> </div> <div class="md-footer-nav__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M4 11v2h12l-5.5 5.5 1.42 1.42L19.84 12l-7.92-7.92L10.5 5.5 16 11H4z"/></svg> </div> </a> </nav> </div> <div class="md-footer-meta md-typeset"> <div class="md-footer-meta__inner md-grid"> <div class=md-footer-copyright> Made with <a href=https://squidfunk.github.io/mkdocs-material/ target=_blank rel=noopener> Material for MkDocs </a> </div> </div> </div> </footer> </div> <script src=../../assets/javascripts/vendor.93c04032.min.js></script> <script src=../../assets/javascripts/bundle.83e5331e.min.js></script><script id=__lang type=application/json>{"clipboard.copy": "Copy to clipboard", "clipboard.copied": "Copied to clipboard", "search.config.lang": "en", "search.config.pipeline": "trimmer, stopWordFilter", "search.config.separator": "[\\s\\-]+", "search.placeholder": "Search", "search.result.placeholder": "Type to start searching", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.term.missing": "Missing"}</script> <script>
|
|
app = initialize({
|
|
base: "../..",
|
|
features: ['navigation.tabs', 'navigation.tabs.sticky', 'navigation.instant', 'navigation.sections'],
|
|
search: Object.assign({
|
|
worker: "../../assets/javascripts/worker/search.8c7e0a7e.min.js"
|
|
}, typeof search !== "undefined" && search)
|
|
})
|
|
</script> </body> </html> |