The Conditions section in the output shows whether the resource is Ready and any errors encountered. For more details on the conditions available for each resource type, see the CRD reference.
If something is not right with the Operator you can check the events for the Operator namespace.
kubectl get events -n ngrok-operator --sort-by='.lastTimestamp'
Example Output:
LAST SEEN TYPE REASON OBJECT MESSAGE3m24s Normal Scheduled pod/ngrok-operator-manager-657c5b69d7-f7vvg Successfully assigned ngrok-operator/ngrok-operator-manager-657c5b69d7-f7vvg to k3d-ngrok-operator-server-03m25s Normal ScalingReplicaSet deployment/ngrok-operator-manager Scaled up replica set ngrok-operator-manager-657c5b69d7 to 13m25s Normal SuccessfulCreate replicaset/ngrok-operator-manager-657c5b69d7 Created pod: ngrok-operator-manager-657c5b69d7-f7vvg3m24s Normal Started pod/ngrok-operator-manager-657c5b69d7-f7vvg Started container ngrok-operator3m24s Normal Created pod/ngrok-operator-manager-657c5b69d7-f7vvg Created container ngrok-operator3m24s Normal Pulled pod/ngrok-operator-manager-657c5b69d7-f7vvg Container image "docker.io/ngrok/ngrok-operator:0.15.0" already present on machine3m15s Normal ScalingReplicaSet deployment/ngrok-operator-manager Scaled down replica set ngrok-operator-manager-74b76d8f6d to 0 from 13m15s Normal SuccessfulDelete replicaset/ngrok-operator-manager-74b76d8f6d Deleted pod: ngrok-operator-manager-74b76d8f6d-2679x3m15s Normal Killing pod/ngrok-operator-manager-74b76d8f6d-2679x Stopping container ngrok-operator2m55s Normal Updating boundendpoint/ngrok-22680758-eb09-576e-a7ac-dc3728458dfc Updating BoundEndpoint/ngrok-22680758-eb09-576e-a7ac-dc3728458dfc2m55s Normal Updated boundendpoint/ngrok-012050e0-8f06-560c-953e-c9d675d41305 Updated BoundEndpoint/ngrok-012050e0-8f06-560c-953e-c9d675d413052m55s Normal Updated boundendpoint/ngrok-22680758-eb09-576e-a7ac-dc3728458dfc Updated BoundEndpoint/ngrok-22680758-eb09-576e-a7ac-dc3728458dfc2m55s Normal Status boundendpoint/ngrok-22680758-eb09-576e-a7ac-dc3728458dfc Successfully reconciled status2m55s Normal Updated boundendpoint/ngrok-22680758-eb09-576e-a7ac-dc3728458dfc Updated Services2m55s Normal Updated service/ngrok-22680758-eb09-576e-a7ac-dc3728458dfc Updated Upstream Service2m55s Normal Updating boundendpoint/ngrok-012050e0-8f06-560c-953e-c9d675d41305 Updating BoundEndpoint/ngrok-012050e0-8f06-560c-953e-c9d675d413052m55s Normal LeaderElection lease/ngrok-operator-leader ngrok-operator-manager-657c5b69d7-f7vvg_72fb437b-38ad-444c-a9d8-d37349f2f677 became leader2m55s Normal Status boundendpoint/ngrok-012050e0-8f06-560c-953e-c9d675d41305 Successfully reconciled status2m55s Normal Updated boundendpoint/ngrok-012050e0-8f06-560c-953e-c9d675d41305 Updated Services2m55s Normal Updated service/ngrok-012050e0-8f06-560c-953e-c9d675d41305 Updated Upstream Service2m55s Normal Updating kubernetesoperator/ngrok-operator Updating KubernetesOperator/ngrok-operator2m55s Normal Status kubernetesoperator/ngrok-operator Successfully reconciled status2m55s Normal Updated kubernetesoperator/ngrok-operator Updated KubernetesOperator/ngrok-operator
Kubernetes events usually expire after an hour, so you might want to restart the Operator to re-create the events while troubleshooting if the events happened more than an hour ago.
The operator runs two main deployments: ngrok-operator-manager (handles CloudEndpoint, Domain, Ingress, Gateway API, and other cluster-level resources) and ngrok-operator-agent (handles AgentEndpoint resources). To check for errors in either:
If you marked an ngrok custom resource for deletion but it is not getting deleted, there may be unresolved finalizers on it.
You can refer to the finalizers page for more information about how the Operator uses finalizers and how to clean up resources with dangling finalizers.If this is happening during or after an uninstall, see the uninstall troubleshooting guide for specific steps to resolve stuck resources and namespaces.
Cloud Endpoints not getting created from Ingress or Gateway API
If you’re applying Ingress and/or Gateway API resources and do not see any CloudEndpoint or AgentEndpoint custom resources created by the Operator, here are a few steps to identify the reason.
The manager pods handle the translation from Ingress and Gateway API into native ngrok resources.
Check the Operator logs for any errors to see if there is a problem with your configuration.
If CloudEndpoint or AgentEndpoint resources are not working, first check the resource status for error conditions, then check the Operator logs for errors processing them. Common errors include an invalid Traffic Policy configuration that may prevent your endpoint from being created.
If you’ve added several resources such as domains and endpoints, you may encounter a limit for the resource you are trying to create depending on your payment plan.
If you are on the pay-as-you-go plan, then you will not encounter this issue and you will be able to create resources freely and only be billed for the resources you create.
Check with the pricing and limits page for information about each plan and any limits associated with it.
If the Operator logs show connection or session errors, its outbound traffic may be blocked. Clusters with a default-deny egress policy need the ngrok hostnames allowlisted. See network egress requirements for the hosts and ports to allow, and for a Job you can run to test connectivity from inside the cluster.
If you aren’t able to identify and resolve your issue, head over to the support page to reach out to ngrok support.
You can also head over to the Operator GitHub repo and see if anyone else encountered the same problem or file a new issue.
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"ngrok documentation","colors":{"primary":"#0078C4","light":"#00BCFF","dark":"#0078C4"},"logo":{"light":"https://mintcdn.com/ngrok/_7R3hf69rnKiCshG/logo/compact-light.svg?fit=max\u0026auto=format\u0026n=_7R3hf69rnKiCshG\u0026q=85\u0026s=d79c7eb9cf2273745608b35a1b312b05","dark":"https://mintcdn.com/ngrok/_7R3hf69rnKiCshG/logo/compact-dark.svg?fit=max\u0026auto=format\u0026n=_7R3hf69rnKiCshG\u0026q=85\u0026s=fcc0cf30ebbc762df394756f6754d3bd","href":"https://ngrok.com/docs"},"favicon":"https://mintcdn.com/ngrok/BQQt-CHCs_8OwVmS/favicon.ico?fit=max\u0026auto=format\u0026n=BQQt-CHCs_8OwVmS\u0026q=85\u0026s=294907ab135b589ed607e4888e1a10a4","background":{"color":{"dark":"#121212"}},"navbar":{"links":[{"href":"https://ngrok.com/","label":"Homepage"},{"href":"https://dashboard.ngrok.com/","label":"Dashboard"}],"primary":{"type":"button","label":"Sign up","href":"https://dashboard.ngrok.com/signup"}},"footer":{"socials":{"x":"https://x.com/ngrokhq","github":"https://github.com/ngrok","linkedin":"https://linkedin.com/company/ngrok","youtube":"https://www.youtube.com/@ngrokHQ"},"links":[{"header":"Product","items":[{"label":"Gateway","href":"https://ngrok.com/docs/gateway/overview"},{"label":"AI Gateway","href":"https://ngrok.ai"},{"label":"Traffic Policy","href":"https://ngrok.com/docs/traffic-policy"},{"label":"Secure Tunnels","href":"https://ngrok.com/docs/agent/overview"},{"label":"Traffic Observability","href":"https://ngrok.com/docs/obs"},{"label":"Kubernetes Operator","href":"https://ngrok.com/docs/k8s"}]},{"header":"Problems we solve","items":[{"label":"API gateway","href":"https://ngrok.com/docs/guides/api-gateway/get-started"},{"label":"AI gateway","href":"https://ngrok.ai/"},{"label":"Webhook gateway","href":"https://ngrok.com/docs/gateway/examples/webhook-gateway"},{"label":"Ephemeral workloads","href":"https://ngrok.com/docs/gateway/examples/ephemeral-workloads"},{"label":"Customer connectivity","href":"https://ngrok.com/use-cases/saas-customer-connectivity"},{"label":"Device gateway","href":"https://ngrok.com/docs/guides/device-gateway/overview"},{"label":"Remote access","href":"https://ngrok.com/docs/guides/ssh-rdp"},{"label":"Share localhost","href":"https://ngrok.com/use-cases/share-localhost"},{"label":"Connect MCPs to AI providers","href":"https://ngrok.com/docs/gateway/api-gateway/mcp-gateway"},{"label":"Test webhooks","href":"https://ngrok.com/docs/share-localhost/webhooks"},{"label":"Access remote K8s clusters","href":"https://ngrok.com/docs/k8s/guides/local-projection"},{"label":"Minecraft","href":"https://ngrok.com/docs/gateway/examples/minecraft"}]},{"header":"Resources","items":[{"label":"Docs","href":"https://ngrok.com/docs/start"},{"label":"Guides","href":"https://ngrok.com/docs/guides"},{"label":"Pricing","href":"https://ngrok.com/pricing"},{"label":"Download","href":"https://ngrok.com/download"},{"label":"Security","href":"https://ngrok.com/security"},{"label":"Trust","href":"https://trust.ngrok.com/"},{"label":"Case studies","href":"https://ngrok.com/customers"},{"label":"Integrations","href":"https://ngrok.com/docs/integrations"},{"label":"Support","href":"https://ngrok.com/support"},{"label":"Abuse","href":"https://ngrok.com/abuse"},{"label":"Status","href":"https://status.ngrok.com/"}]},{"header":"Company","items":[{"label":"About","href":"https://ngrok.com/about"},{"label":"Contact","href":"https://ngrok.com/contact"},{"label":"Blog","href":"https://ngrok.com/blog"},{"label":"Newsletter","href":"https://ngrok.com/newsletter"},{"label":"Press","href":"https://ngrok.com/press"},{"label":"Brand","href":"https://ngrok.com/brand"},{"label":"Careers","href":"https://ngrok.com/careers"}]}]},"seo":{"metatags":{"canonical":"https://ngrok.com/docs"},"indexing":"navigable"},"fonts":{"heading":{"family":"Roobert","weight":600,"source":"https://assets.ngrok.com/fonts/roobert/roobert-proportional-vf.woff2","format":"woff2"},"body":{"family":"Roobert","weight":400,"source":"https://assets.ngrok.com/fonts/roobert/roobert-proportional-vf.woff2","format":"woff2"}},"integrations":{"posthog":{"apiKey":"phc_mUGMN4JlTzthGcz0XNK0z6NKUqdeQMn7rPRAM3mifjQ","apiHost":"https://e.ngrok.com"}},"contextual":{"options":["copy","view",{"title":"Connect the ngrok MCP server","description":"Let your AI agent manage your ngrok account","icon":"plug","href":"https://ngrok.com/docs/mcp-server"},"claude",{"title":"Connect to Cursor","description":"Install the ngrok MCP server in Cursor","icon":"/img/icons/cursor.svg","href":{"base":"cursor://anysphere.cursor-deeplink/mcp/install","query":[{"key":"name","value":"ngrok"},{"key":"config","value":"eyJ1cmwiOiJodHRwczovL21jcC5uZ3Jvay5jb20vbWNwIiwiYXV0aCI6eyJDTElFTlRfSUQiOiJpYW1jbGlfM0tlSzhkOHNPNGQ5UkFyQVJ4N1JGemNUVnRPIn19"}]}},{"title":"Connect to VS Code","description":"Install the ngrok MCP server in VS Code","icon":"/img/icons/vscode.svg","href":"vscode:mcp/install?%7B%22name%22%3A%22ngrok%22%2C%22type%22%3A%22http%22%2C%22url%22%3A%22https%3A%2F%2Fmcp.ngrok.com%2Fmcp%22%7D"},"assistant","chatgpt","perplexity","grok","aistudio","devin","download-spec"],"display":"header"},"styling":{"latex":true},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"ngrok","hasAudioNarration":false,"actualSubdomain":"ngrok","customDomains":["ngrok.com"],"gitSource":{"type":"github","owner":"ngrok","repo":"ngrok-docs","deployBranch":"main","contentDirectory":"","isPrivate":false,"mountPath":"","label":""},"chroma":{"liveDeploymentHistoryId":"6aecb8db001d7bfa483962ab","collectionId":"168c55f8-51d1-488b-ad7b-4f43fa25d087","schemaVersion":"v3","latestBuiltDeploymentHistoryId":"6aecb8db001d7bfa483962ab"},"feedback":{"thumbs":true,"edits":true,"issues":true},"entitlements":{"AI_CHAT":{"status":"DISABLED"},"CONTEXTUAL_FEEDBACK":{"status":"ENABLED"},"CODE_SNIPPET_FEEDBACK":{"status":"ENABLED"},"WEB_MCP":{"status":"ENABLED"},"NARRATION":{"status":"DISABLED"}},"buildId":"6aee02cfb24ea02bf4ec94f9","clientVersion":"0.0.4074","searchFilterCounts":[{"language":"default","tag":"Reference","count":541},{"language":"default","tag":"Gateway","count":485},{"language":"default","tag":"Integrations","count":300},{"language":"default","tag":"AI Gateway","count":253},{"language":"default","tag":"Platform API","count":244},{"language":"default","tag":"Connectivity","count":92},{"language":"default","tag":"Webhooks","count":65},{"language":"default","tag":"Kubernetes Operators","count":59},{"language":"default","tag":"Traffic Policy","count":58},{"language":"default","tag":"API Reference","count":48}],"searchSettings":{"isFiltersEnabled":false}},"assistantConfig":{"enableAskAiButton":false,"enableAskAiSearchBar":true,"deflection":{"enabled":true,"email":"support@ngrok.com","showHelpButton":true}},"basePath":"/docs","hasChatPermissions":false,"hasWebMcpPermissions":true,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"rbac-expansion","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"vite-origin","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-serve","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"live-agents","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"comment-mode","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[{"filePath":"style.css","content":"img{max-width:100%;height:auto}.tooltip{font-weight:bold;text-decoration:none!important;position:relative}.tooltip::after{content:\"\";position:absolute;bottom:0;left:0;width:100%;height:1px;border-bottom:1px dotted rgba(0, 0, 0, 0.8)}:root .tooltip,[data-theme=\"light\"] .tooltip,.light .tooltip{color:rgba(0, 0, 0, 0.8)}:root .tooltip::after,[data-theme=\"light\"] .tooltip::after,.light .tooltip::after{border-bottom-color:rgba(0, 0, 0, 0.8)}[data-theme=\"dark\"] .tooltip,.dark .tooltip{color:rgba(255, 255, 255, 0.8)}[data-theme=\"dark\"] .tooltip::after,.dark .tooltip::after{border-bottom-color:rgba(255, 255, 255, 0.8)}@media (prefers-color-scheme: light){.tooltip{color:rgba(0, 0, 0, 0.8)}.tooltip::after{border-bottom-color:rgba(0, 0, 0, 0.8)}}@media (prefers-color-scheme: dark){.tooltip{color:rgba(255, 255, 255, 0.8)}.tooltip::after{border-bottom-color:rgba(255, 255, 255, 0.8)}}:root td .tooltip{font-weight:inherit;color:inherit}.mcp-examples [data-component-part=\"accordion-content\"]{padding-left:3rem}:root .mcp-examples .tooltip{font-weight:inherit;color:inherit}td button[data-state]{text-align:start}td button[data-state] code{white-space:nowrap;word-break:normal;overflow-wrap:normal}td:first-child:has(>button[data-state] code){width:100%}table:has(td:first-child>button[data-state] code) td,table:has(td:first-child>button[data-state] code) th{min-width:0;white-space:nowrap}td .icon{mask-size:contain;-webkit-mask-size:contain}td .tooltip:has(>.icon){text-decoration:none}td .tooltip:has(>.icon)::after{display:none}td pre,td code{word-wrap:break-word;overflow-wrap:break-word;word-break:break-word}td pre{white-space:pre-wrap}td:has(pre),td:has(code){min-width:240px;width:auto}td pre{min-width:200px}td code{min-width:150px}@font-face{font-family:\"Roobert\";src:url(\"https://assets.ngrok.com/fonts/roobert/roobert-proportional-vf.woff2\")\n format(\"woff2 supports variations\"),\n url(\"https://assets.ngrok.com/fonts/roobert/roobert-proportional-vf.woff2\")\n format(\"woff2-variations\");font-weight:300 900;font-display:swap;font-style:normal}@font-face{font-family:\"JetBrains Mono\";src:url(\"https://assets.ngrok.com/fonts/jetbrains/jetbrainsmono-wght.woff2\")\n format(\"woff2 supports variations\"),\n url(\"https://assets.ngrok.com/fonts/jetbrains/jetbrainsmono-wght.woff2\")\n format(\"woff2-variations\");font-weight:100 800;font-display:swap;font-style:normal}@font-face{font-family:\"JetBrains Mono\";src:url(\"https://assets.ngrok.com/fonts/jetbrains/jetbrainsmono-italic-wght.woff2\")\n format(\"woff2 supports variations\"),\n url(\"https://assets.ngrok.com/fonts/jetbrains/jetbrainsmono-italic-wght.woff2\")\n format(\"woff2-variations\");font-weight:100 800;font-display:swap;font-style:italic}code,pre,pre code,.hljs,.token{font-family:\"JetBrains Mono\",\n ui-monospace,\n SFMono-Regular,\n Menlo,\n Monaco,\n Consolas,\n Liberation Mono,\n Courier New,\n monospace!important}#topbar-cta-button span.bg-primary-dark{background-color:#121212!important;transition:background-color!important}#topbar-cta-button a:hover span.bg-primary-dark{background-color:#171717!important}#topbar-cta-button span.text-white{color:#fff!important}.dark #topbar-cta-button span.bg-primary-dark,[data-theme=\"dark\"] #topbar-cta-button span.bg-primary-dark{background-color:rgba(255, 255, 255, 0.85)!important;transition:background-color!important}.dark #topbar-cta-button a:hover span.bg-primary-dark,[data-theme=\"dark\"] #topbar-cta-button a:hover span.bg-primary-dark{background-color:#fff!important}.dark #topbar-cta-button span.text-white,[data-theme=\"dark\"] #topbar-cta-button span.text-white{color:#000!important}#topbar-cta-button svg{color:#fff!important}.dark #topbar-cta-button svg,[data-theme=\"dark\"] #topbar-cta-button svg{color:#000!important}footer#footer a{overflow:visible;text-overflow:clip;white-space:nowrap}@media (min-width: 768px) and (max-width: 880px){footer#footer a{white-space:normal}}.nav-tabs-item>div.absolute.bottom-0{height:2px!important}.docs-home-updates a{display:block;padding-block:1.25rem;border-bottom:1px solid #d4d4d4;text-decoration:none}.docs-home-updates .docs-home-date{display:block;color:#666;font-size:0.8125rem;margin-bottom:0.375rem}.docs-home-updates .docs-home-title{color:#121212;font-weight:600}.docs-home-updates a:focus-visible{outline:2px solid rgb(var(--primary));outline-offset:4px}.docs-home-updates a:hover .docs-home-title{text-decoration:underline}.docs-home-updates p{margin:0.375rem 0 0;color:#525252;font-size:0.875rem;line-height:1.5}.dark .docs-home-updates .docs-home-title{color:#f5f5f5}.dark .docs-home-updates a{border-color:#404040}.dark .docs-home-updates a:focus-visible{outline-color:rgb(var(--primary-light))}.dark .docs-home-updates .docs-home-date,.dark .docs-home-updates p{color:#a3a3a3}.nav-anchor div:has(>img[src$=\"/img/icons/gateway.svg\"]){background:rgb(16 185 129 / 0.2)!important}.nav-anchor div:has(>img[src$=\"/img/icons/ai-gateway.svg\"]){background:rgb(245 158 11 / 0.2)!important}.nav-anchor div:has(>img[src$=\"/img/icons/share-localhost.svg\"]){background:rgb(168 85 247 / 0.2)!important}.nav-anchor img[src*=\"/img/icons/\"]{opacity:1;background:transparent!important}html:has(.nav-tabs-item[data-active=\"true\"]:is([href^=\"/gateway/\"],[href^=\"/docs/gateway/\"])){--primary: 4 120 87;--primary-light: 52 211 153;--primary-dark: 4 120 87}html:has(.nav-tabs-item[data-active=\"true\"]:is([href^=\"/ai-gateway/\"],[href^=\"/docs/ai-gateway/\"])){--primary: 180 83 9;--primary-light: 251 191 36;--primary-dark: 180 83 9}html:has(.nav-tabs-item[data-active=\"true\"]:is([href^=\"/share-localhost/\"],[href^=\"/docs/share-localhost/\"])){--primary: 147 51 234;--primary-light: 192 132 252;--primary-dark: 147 51 234}#navbar>.max-w-8xl{max-width:none}#navbar .h-16{padding-inline:0.5rem}@media (min-width: 64rem){#navbar a:has(>.nav-logo){margin-left:1.5rem}}@media (min-width: 64rem){#navbar div:has(>.nav-tabs){padding-inline:2rem 1rem}#navbar .nav-tabs{flex:1}#navbar .nav-tabs-item:is([href^=\"/for-agents\"],[href^=\"/docs/for-agents\"]){margin-left:auto}}#navbar .nav-tabs-item:focus-visible{outline:none}#navbar .nav-tabs-item:focus-visible::before{content:\"\";position:absolute;inset:0.625rem -0.5rem;border-radius:0.375rem;box-shadow:0 0 0 4px rgb(var(--primary) / 0.3);pointer-events:none}:is(html.dark,html[data-theme=\"dark\"]) #navbar .nav-tabs-item:focus-visible::before{box-shadow:0 0 0 4px rgb(var(--primary-light) / 0.35)}@media (min-width: 64rem) and (max-width: 80rem){#navbar .nav-tabs{column-gap:1rem}}@media (min-width: 96rem){:root{--topbar-tabs-height: 0rem !important;--experiment-search-width: 9rem;--experiment-actions-width: 21rem}#navbar>.max-w-8xl{position:relative}#navbar div:has(>.nav-tabs){position:absolute;top:0;left:10rem;right:calc(0.5rem + var(--experiment-actions-width) + var(--experiment-search-width) + 2.5rem);height:4rem;padding-inline:0;z-index:30}#navbar .nav-tabs{white-space:nowrap}#navbar .h-16>div>div:has(>a>.nav-logo){flex:1 1 auto}#navbar .h-16>div>div:has(>#search-bar-entry){flex:0 0 var(--experiment-search-width)}#navbar .h-16>div>div:has(>nav){flex:0 0 var(--experiment-actions-width)}#navbar .h-16>div{border-bottom:0}}@media (min-width: 106rem){:root{--experiment-search-width: 12rem}}@media (min-width: 64rem){#navbar.is-not-custom.is-not-center.is-not-wide~div:has(>#sidebar){--experiment-sidebar-width: 18rem;--experiment-article-width: 52rem;--experiment-content-width: 74rem;max-width:none;padding-inline:1rem}#navbar.is-not-custom.is-not-center.is-not-wide~div>#sidebar{width:var(--experiment-sidebar-width)}#navbar.is-not-custom.is-not-center.is-not-wide~div:has(>#sidebar)>#content-container{flex:none;width:min(\n var(--experiment-content-width),\n calc(100% - var(--experiment-sidebar-width) - 2rem)\n );margin-left:clamp(\n 2rem,\n calc((100% - var(--experiment-article-width)) / 2 - var(--experiment-sidebar-width)),\n max(2rem, calc(100% - var(--experiment-sidebar-width) - var(--experiment-content-width)))\n );margin-right:auto}#navbar.is-not-custom.is-not-center.is-not-wide~div #content-area{flex:1;min-width:0;width:auto;margin-inline:0;padding-inline:0}#navbar.is-not-custom.is-not-center.is-not-wide~div #content-side-layout{flex:none;width:19rem}}.ngrok-consent{--ngrok-consent-surface: #ffffff;--ngrok-consent-border: #d4d4d4;--ngrok-consent-text: #121212;--ngrok-consent-action-bg-hover: rgb(115 115 115 / 10%);--ngrok-consent-focus-ring: rgb(0 120 196 / 35%);--ngrok-consent-shadow:\n 0 1px 13px 0 rgb(0 0 0 / 5%),\n 0 4px 6px -4px rgb(0 0 0 / 10%),\n 0 10px 15px -3px rgb(0 0 0 / 10%);position:fixed;inset-inline:0;bottom:1rem;z-index:2147483000;display:flex;justify-content:center;padding-inline:1rem;pointer-events:none}:is(html.dark,html[data-theme=\"dark\"]) .ngrok-consent{--ngrok-consent-surface: #171717;--ngrok-consent-border: #404040;--ngrok-consent-text: #ffffff;--ngrok-consent-focus-ring: rgb(0 188 255 / 35%);--ngrok-consent-shadow:\n 0 1px 13px 0 rgb(0 0 0 / 15%),\n 0 4px 6px -4px rgb(0 0 0 / 30%),\n 0 10px 15px -3px rgb(0 0 0 / 30%)}@media (min-width: 640px){.ngrok-consent{bottom:2.5rem}}.ngrok-consent-panel{pointer-events:auto;display:flex;align-items:center;gap:0.75rem;width:fit-content;max-width:100%;padding:0.5rem 0.75rem;border:1px solid var(--ngrok-consent-border);border-radius:1rem;background-color:var(--ngrok-consent-surface);color:var(--ngrok-consent-text);box-shadow:var(--ngrok-consent-shadow);transition-property:opacity, translate;transition-timing-function:cubic-bezier(0, 0, 0.2, 1);transition-duration:400ms}.ngrok-consent-panel[hidden]{display:none}.ngrok-consent-panel[data-state=\"closed\"]{pointer-events:none;opacity:0;transition-duration:200ms}@media (prefers-reduced-motion: no-preference){.ngrok-consent-panel[data-state=\"closed\"]{translate:0 calc(100% + 2.5rem)}}.ngrok-consent-message{margin:0;font-size:0.875rem;line-height:1.25rem}.ngrok-consent-actions{display:flex;align-items:center;gap:0.375rem}.ngrok-consent-icon-button{display:inline-flex;flex-shrink:0;align-items:center;justify-content:center;width:1.5rem;height:1.5rem;padding:0;border:1px solid transparent;border-radius:0.375rem;background-color:transparent;color:var(--ngrok-consent-text);cursor:pointer;outline:2px solid transparent;outline-offset:2px;text-decoration:none;transition:transform 150ms cubic-bezier(0, 0, 0.2, 1)}.ngrok-consent-icon-button:hover{background-color:var(--ngrok-consent-action-bg-hover)}.ngrok-consent-icon-button:active{transform:scale(0.97)}.ngrok-consent-icon-button:focus-visible{box-shadow:0 0 0 4px var(--ngrok-consent-focus-ring)}.ngrok-consent-icon-button svg{width:1.25rem;height:1.25rem;flex-shrink:0}img[src$=\"/img/icons/cursor.svg\"],img[src$=\"/img/icons/vscode.svg\"]{opacity:0.5}.dark img[src$=\"/img/icons/cursor.svg\"],.dark img[src$=\"/img/icons/vscode.svg\"]{filter:invert(1)}"}],"page":{"pagePath":"gateway/k8s/guides/troubleshooting","slug":"/gateway/k8s/guides/troubleshooting","pageMetadata":{"title":"Troubleshooting the ngrok Kubernetes Operator","sidebarTitle":"Troubleshooting","description":"Learn how to troubleshoot common issues with the ngrok Kubernetes Operator using kubectl describe, events, and logs.","href":"/gateway/k8s/guides/troubleshooting"},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsx(_components.p, {\n children: \"Learn how to troubleshoot common issues with the ngrok Kubernetes Operator using kubectl describe, events, and logs.\"\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={a:`a`,code:`code`,p:`p`,pre:`pre`,span:`span`,..._provideComponents(),...props.components},{CodeBlock,Heading,Tip}=_components;if(!CodeBlock)_missingMdxReference(`CodeBlock`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!Tip)_missingMdxReference(`Tip`,true);return _jsxs(_Fragment,{children:[_jsx(Heading,{level:`2`,id:`check-resource-status`,children:`Check resource status`}),`\n`,_jsxs(_components.p,{children:[`ngrok custom resources include status conditions that report their current state. Use `,_jsx(_components.code,{children:`kubectl describe`}),` to check conditions and events on a resource:`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`1`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`1`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`kubectl`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` describe`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` cloudendpoint`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` \u003c`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`nam`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`e`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`>`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -n`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` \u003c`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`namespac`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`e`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`>`})]}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[`The `,_jsx(_components.code,{children:`Conditions`}),` section in the output shows whether the resource is `,_jsx(_components.code,{children:`Ready`}),` and any errors encountered. For more details on the conditions available for each resource type, see the `,_jsx(_components.a,{href:`/gateway/k8s/crds`,children:`CRD reference`}),`.`]}),`\n`,_jsx(Heading,{level:`2`,id:`check-kubernetes-events`,children:`Check Kubernetes events`}),`\n`,_jsx(_components.p,{children:`If something is not right with the Operator you can check the events for the Operator namespace.`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`1`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`1`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`kubectl`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` get`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` events`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -n`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` ngrok-operator`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` --sort-by=`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`'.lastTimestamp'`})]}),`\n`]})})}),`\n`,_jsx(_components.p,{children:`Example Output:`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`24`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`24`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`LAST`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` SEEN`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` TYPE`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` REASON`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` OBJECT`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` MESSAGE`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`3m24s`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` Normal`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` Scheduled`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` pod/ngrok-operator-manager-657c5b69d7-f7vvg`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` Successfully`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` assigned`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` ngrok-operator/ngrok-operator-manager-657c5b69d7-f7vvg`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` to`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` k3d-ngrok-operator-server-0`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`3m25s`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` Normal`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` ScalingReplicaSet`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` deployment/ngrok-operator-manager`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` Scaled`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` up`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` replica`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` set`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` ngrok-operator-manager-657c5b69d7`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` to`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:` 1`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`3m25s`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` Normal`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` SuccessfulCreate`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` replicaset/ngrok-operator-manager-657c5b69d7`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` Created`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` pod:`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` ngrok-operator-manager-657c5b69d7-f7vvg`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`3m24s`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` Normal`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` Started`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` pod/ngrok-operator-manager-657c5b69d7-f7vvg`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` Started`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` container`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` ngrok-operator`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`3m24s`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` Normal`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` Created`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` pod/ngrok-operator-manager-657c5b69d7-f7vvg`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` Created`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` container`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` ngrok-operator`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`3m24s`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` Normal`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` Pulled`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` pod/ngrok-operator-manager-657c5b69d7-f7vvg`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` Container`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` image`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"docker.io/ngrok/ngrok-operator:0.15.0\"`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` already`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` present`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` on`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` machine`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`3m15s`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` Normal`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` ScalingReplicaSet`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` deployment/ngrok-operator-manager`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` Scaled`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` down`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` replica`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` set`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` ngrok-operator-manager-74b76d8f6d`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` to`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:` 0`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` from`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:` 1`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`3m15s`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` Normal`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` SuccessfulDelete`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` replicaset/ngrok-operator-manager-74b76d8f6d`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` Deleted`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` pod:`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` ngrok-operator-manager-74b76d8f6d-2679x`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`3m15s`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` Normal`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` Killing`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` pod/ngrok-operator-manager-74b76d8f6d-2679x`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` Stopping`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` container`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` ngrok-operator`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`2m55s`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` Normal`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` Updating`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` boundendpoint/ngrok-22680758-eb09-576e-a7ac-dc3728458dfc`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` Updating`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` BoundEndpoint/ngrok-22680758-eb09-576e-a7ac-dc3728458dfc`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`2m55s`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` Normal`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` Updated`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` boundendpoint/ngrok-012050e0-8f06-560c-953e-c9d675d41305`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` Updated`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` BoundEndpoint/ngrok-012050e0-8f06-560c-953e-c9d675d41305`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`2m55s`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` Normal`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` Updated`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` boundendpoint/ngrok-22680758-eb09-576e-a7ac-dc3728458dfc`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` Updated`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` BoundEndpoint/ngrok-22680758-eb09-576e-a7ac-dc3728458dfc`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`2m55s`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` Normal`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` Status`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` boundendpoint/ngrok-22680758-eb09-576e-a7ac-dc3728458dfc`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` Successfully`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` reconciled`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` status`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`2m55s`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` Normal`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` Updated`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` boundendpoint/ngrok-22680758-eb09-576e-a7ac-dc3728458dfc`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` Updated`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` Services`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`2m55s`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` Normal`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` Updated`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` service/ngrok-22680758-eb09-576e-a7ac-dc3728458dfc`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` Updated`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` Upstream`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` Service`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`2m55s`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` Normal`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` Updating`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` boundendpoint/ngrok-012050e0-8f06-560c-953e-c9d675d41305`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` Updating`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` BoundEndpoint/ngrok-012050e0-8f06-560c-953e-c9d675d41305`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`2m55s`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` Normal`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` LeaderElection`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` lease/ngrok-operator-leader`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` ngrok-operator-manager-657c5b69d7-f7vvg_72fb437b-38ad-444c-a9d8-d37349f2f677`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` became`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` leader`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`2m55s`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` Normal`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` Status`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` boundendpoint/ngrok-012050e0-8f06-560c-953e-c9d675d41305`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` Successfully`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` reconciled`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` status`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`2m55s`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` Normal`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` Updated`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` boundendpoint/ngrok-012050e0-8f06-560c-953e-c9d675d41305`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` Updated`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` Services`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`2m55s`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` Normal`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` Updated`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` service/ngrok-012050e0-8f06-560c-953e-c9d675d41305`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` Updated`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` Upstream`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` Service`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`2m55s`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` Normal`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` Updating`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` kubernetesoperator/ngrok-operator`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` Updating`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` KubernetesOperator/ngrok-operator`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`2m55s`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` Normal`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` Status`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` kubernetesoperator/ngrok-operator`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` Successfully`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` reconciled`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` status`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`2m55s`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` Normal`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` Updated`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` kubernetesoperator/ngrok-operator`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` Updated`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` KubernetesOperator/ngrok-operator`})]}),`\n`]})})}),`\n`,_jsx(Tip,{children:_jsx(_components.p,{children:`Kubernetes events usually expire after an hour, so you might want to restart the Operator to re-create the events while troubleshooting if the events happened more than an hour ago.`})}),`\n`,_jsx(Heading,{level:`2`,id:`check-operator-logs`,children:`Check Operator logs`}),`\n`,_jsxs(_components.p,{children:[`The operator runs two main deployments: `,_jsx(_components.code,{children:`ngrok-operator-manager`}),` (handles `,_jsx(_components.code,{children:`CloudEndpoint`}),`, `,_jsx(_components.code,{children:`Domain`}),`, `,_jsx(_components.code,{children:`Ingress`}),`, Gateway API, and other cluster-level resources) and `,_jsx(_components.code,{children:`ngrok-operator-agent`}),` (handles `,_jsx(_components.code,{children:`AgentEndpoint`}),` resources). To check for errors in either:`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`2`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`2`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`kubectl`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` logs`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -n`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` ngrok-operator`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` deploy/ngrok-operator-manager`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` |`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:` grep`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -i`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` error`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`kubectl`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` logs`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -n`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` ngrok-operator`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` deploy/ngrok-operator-agent`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` |`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:` grep`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -i`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` error`})]}),`\n`]})})}),`\n`,_jsx(_components.p,{children:`Replace the namespace if you installed the Operator somewhere other than the default location.`}),`\n`,_jsx(Heading,{level:`2`,id:`resources-not-getting-deleted`,children:`Resources not getting deleted`}),`\n`,_jsxs(_components.p,{children:[`If you marked an ngrok custom resource for deletion but it is not getting deleted, there may be unresolved finalizers on it.\nYou can refer to the `,_jsx(_components.a,{href:`/gateway/k8s/guides/finalizers`,children:`finalizers page`}),` for more information about how the Operator uses finalizers and how to clean up resources with dangling finalizers.`]}),`\n`,_jsxs(_components.p,{children:[`If this is happening during or after an uninstall, see the `,_jsx(_components.a,{href:`/gateway/k8s/installation/uninstall#troubleshooting`,children:`uninstall troubleshooting guide`}),` for specific steps to resolve stuck resources and namespaces.`]}),`\n`,_jsx(Heading,{level:`2`,id:`cloud-endpoints-not-getting-created-from-ingress-or-gateway-api`,children:`Cloud Endpoints not getting created from Ingress or Gateway API`}),`\n`,_jsxs(_components.p,{children:[`If you’re applying `,_jsx(_components.code,{children:`Ingress`}),` and/or Gateway API resources and do not see any `,_jsx(_components.code,{children:`CloudEndpoint`}),` or `,_jsx(_components.code,{children:`AgentEndpoint`}),` custom resources created by the Operator, here are a few steps to identify the reason.`]}),`\n`,_jsx(Heading,{level:`3`,id:`ingress-uses-ngrok-ingressclass`,children:`Ingress uses ngrok IngressClass?`}),`\n`,_jsxs(_components.p,{children:[`The ngrok `,_jsx(_components.code,{children:`IngressClass`}),` is required to use `,_jsx(_components.code,{children:`Ingress`}),` resources. Check that your `,_jsx(_components.code,{children:`Ingress`}),` uses the ngrok `,_jsx(_components.code,{children:`IngressClass`}),` like the following example.`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`18`,language:`yaml`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`yaml`,children:_jsxs(_components.code,{language:`yaml`,numberOfLines:`18`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:`apiVersion`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`networking.k8s.io/v1`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:`kind`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`Ingress`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:`metadata`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`:`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:` name`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`demo-ingress`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:` namespace`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`default`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:`spec`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`:`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:` ingressClassName`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`ngrok`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:` rules`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`:`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` - `}),_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:`host`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`example-ingress.ngrok.app`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:` http`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`:`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:` paths`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`:`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` - `}),_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:`backend`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`:`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:` service`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`:`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:` name`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`example-service`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:` port`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`:`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:` number`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`80`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:` path`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`/`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:` pathType`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`Prefix`})]}),`\n`]})})}),`\n`,_jsx(Heading,{level:`3`,id:`gateway-api-uses-the-ngrok-gatewayclass`,children:`Gateway API uses the ngrok GatewayClass?`}),`\n`,_jsxs(_components.p,{children:[`The ngrok `,_jsx(_components.code,{children:`GatewayClass`}),` is required to use Gateway API resources. If you do not already have it installed, you can create it with:`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`8`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`8`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`kubectl`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` apply`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -f`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` -`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`\u003c\u003c`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`EOF`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`apiVersion: gateway.networking.k8s.io/v1`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`kind: GatewayClass`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`metadata:`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` name: ngrok`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`spec:`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` controllerName: ngrok.com/gateway-controller`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`EOF`})}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[`Then, make sure your `,_jsx(_components.code,{children:`Gateway`}),` uses the `,_jsx(_components.code,{children:`GatewayClass`}),` like the following example:`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`15`,language:`yaml`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`yaml`,children:_jsxs(_components.code,{language:`yaml`,numberOfLines:`15`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:`apiVersion`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`gateway.networking.k8s.io/v1`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:`kind`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`Gateway`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:`metadata`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`:`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:` name`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`example-gateway`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:` namespace`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`default`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:`spec`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`:`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:` gatewayClassName`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`ngrok`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:` listeners`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`:`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` - `}),_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:`allowedRoutes`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`:`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:` namespaces`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`:`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:` from`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`Same`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:` hostname`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`example-gateway.ngrok.app`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:` name`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`example`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:` port`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`443`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:` protocol`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`HTTPS`})]}),`\n`]})})}),`\n`,_jsx(Heading,{level:`3`,id:`check-operator-logs-2`,children:`Check Operator logs`}),`\n`,_jsxs(_components.p,{children:[`The manager pods handle the translation from `,_jsx(_components.code,{children:`Ingress`}),` and Gateway API into native ngrok resources.\nCheck the `,_jsx(_components.a,{href:`#check-operator-logs`,children:`Operator logs`}),` for any errors to see if there is a problem with your configuration.`]}),`\n`,_jsx(Heading,{level:`2`,id:`endpoints-not-showing-up-on-the-dashboard`,children:`Endpoints not showing up on the dashboard`}),`\n`,_jsxs(_components.p,{children:[`If `,_jsx(_components.code,{children:`CloudEndpoint`}),` or `,_jsx(_components.code,{children:`AgentEndpoint`}),` resources are not working, first `,_jsx(_components.a,{href:`#check-resource-status`,children:`check the resource status`}),` for error conditions, then `,_jsx(_components.a,{href:`#check-operator-logs`,children:`check the Operator logs`}),` for errors processing them. Common errors include an invalid Traffic Policy configuration that may prevent your endpoint from being created.`]}),`\n`,_jsx(Heading,{level:`2`,id:`resource-limits`,children:`Resource limits`}),`\n`,_jsxs(_components.p,{children:[`If you’ve added several resources such as domains and endpoints, you may encounter a limit for the resource you are trying to create depending on your payment plan.\nIf you are on the pay-as-you-go plan, then you will not encounter this issue and you will be able to create resources freely and only be billed for the resources you create.\nCheck with the `,_jsx(_components.a,{href:`/pricing-limits/`,children:`pricing and limits page`}),` for information about each plan and any limits associated with it.`]}),`\n`,_jsx(Heading,{level:`2`,id:`operator-can’t-reach-ngrok`,children:`Operator can’t reach ngrok`}),`\n`,_jsxs(_components.p,{children:[`If the Operator logs show connection or session errors, its outbound traffic may be blocked. Clusters with a default-deny egress policy need the ngrok hostnames allowlisted. See `,_jsx(_components.a,{href:`/gateway/k8s/installation/network-egress`,children:`network egress requirements`}),` for the hosts and ports to allow, and for a `,_jsx(_components.code,{children:`Job`}),` you can run to test connectivity from inside the cluster.`]}),`\n`,_jsx(Heading,{level:`2`,id:`still-need-help`,children:`Still need help?`}),`\n`,_jsxs(_components.p,{children:[`If you aren’t able to identify and resolve your issue, head over to the `,_jsx(_components.a,{href:`https://ngrok.com/support`,children:`support page`}),` to reach out to ngrok support.\nYou can also head over to `,_jsx(_components.a,{href:`https://github.com/ngrok/ngrok-operator`,children:`the Operator GitHub repo`}),` and see if anyone else encountered the same problem or file a new issue.`]})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Troubleshooting the ngrok Kubernetes Operator","sidebarTitle":"Troubleshooting","description":"Learn how to troubleshoot common issues with the ngrok Kubernetes Operator using kubectl describe, events, and logs.","href":"/gateway/k8s/guides/troubleshooting"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"Check resource status","slug":"check-resource-status","depth":2,"children":[]},{"title":"Check Kubernetes events","slug":"check-kubernetes-events","depth":2,"children":[]},{"title":"Check Operator logs","slug":"check-operator-logs","depth":2,"children":[]},{"title":"Resources not getting deleted","slug":"resources-not-getting-deleted","depth":2,"children":[]},{"title":"Cloud Endpoints not getting created from Ingress or Gateway API","slug":"cloud-endpoints-not-getting-created-from-ingress-or-gateway-api","depth":2,"children":[{"title":"Ingress uses ngrok IngressClass?","slug":"ingress-uses-ngrok-ingressclass","depth":3,"children":[]},{"title":"Gateway API uses the ngrok GatewayClass?","slug":"gateway-api-uses-the-ngrok-gatewayclass","depth":3,"children":[]},{"title":"Check Operator logs","slug":"check-operator-logs-2","depth":3,"children":[]}]},{"title":"Endpoints not showing up on the dashboard","slug":"endpoints-not-showing-up-on-the-dashboard","depth":2,"children":[]},{"title":"Resource limits","slug":"resource-limits","depth":2,"children":[]},{"title":"Operator can’t reach ngrok","slug":"operator-can’t-reach-ngrok","depth":2,"children":[]},{"title":"Still need help?","slug":"still-need-help","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":["/docs/_mintlify/custom/ngrok/05d9da4b27f4fed8/redirect-to-ngrok.js","/docs/_mintlify/custom/ngrok/cabe0d94bdb3d370/persist-query-params.js","/docs/_mintlify/custom/ngrok/bd21a8e6e31069d0/definition-wrapper.js","/docs/_mintlify/custom/ngrok/6167f7a3c0c9913f/consent.js"],"subdomain":"ngrok","siteName":"ngrok documentation","title":"Troubleshooting the ngrok Kubernetes Operator - ngrok documentation","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-10-28T22:35:20.532Z","originalFileLocation":"gateway/k8s/guides/troubleshooting.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"system\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Learn how to troubleshoot common issues with the ngrok Kubernetes Operator using kubectl describe, events, and logs.\">\u003cmeta data-mint-head name=\"application-name\" content=\"ngrok documentation\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/docs/mintlify-assets/_mintlify/favicons/ngrok/EDFj7szN2_Vn64sM/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/docs/mintlify-assets/_mintlify/favicons/ngrok/EDFj7szN2_Vn64sM/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/docs/mintlify-assets/_mintlify/favicons/ngrok/EDFj7szN2_Vn64sM/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/docs/mintlify-assets/_mintlify/favicons/ngrok/EDFj7szN2_Vn64sM/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/docs/mintlify-assets/_mintlify/favicons/ngrok/EDFj7szN2_Vn64sM/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/docs/mintlify-assets/_mintlify/favicons/ngrok/EDFj7szN2_Vn64sM/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/docs/mintlify-assets/_mintlify/favicons/ngrok/EDFj7szN2_Vn64sM/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/docs/mintlify-assets/_mintlify/favicons/ngrok/EDFj7szN2_Vn64sM/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/docs/mintlify-assets/_mintlify/favicons/ngrok/EDFj7szN2_Vn64sM/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Troubleshooting the ngrok Kubernetes Operator - ngrok documentation\">\u003cmeta data-mint-head property=\"og:description\" content=\"Learn how to troubleshoot common issues with the ngrok Kubernetes Operator using kubectl describe, events, and logs.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"ngrok documentation\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://ngrok.com/docs/gateway/k8s/guides/troubleshooting\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://ngrok.mintlify.site/docs/_mintlify/api/og/v2?division=Guides\u0026amp;title=Troubleshooting+the+ngrok+Kubernetes+Operator\u0026amp;description=Learn+how+to+troubleshoot+common+issues+with+the+ngrok+Kubernetes+Operator+using+kubectl+describe%2C+events%2C+and+logs.\u0026amp;theme=2d279b478d2364e61899f5e9\u0026amp;signature=ab1784c59761b8c1083eb8b7f1812883cf1f143cfb3976fbf83644df83212969\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Troubleshooting the ngrok Kubernetes Operator - ngrok documentation\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Learn how to troubleshoot common issues with the ngrok Kubernetes Operator using kubectl describe, events, and logs.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://ngrok.mintlify.site/docs/_mintlify/api/og/v2?division=Guides\u0026amp;title=Troubleshooting+the+ngrok+Kubernetes+Operator\u0026amp;description=Learn+how+to+troubleshoot+common+issues+with+the+ngrok+Kubernetes+Operator+using+kubectl+describe%2C+events%2C+and+logs.\u0026amp;theme=2d279b478d2364e61899f5e9\u0026amp;signature=ab1784c59761b8c1083eb8b7f1812883cf1f143cfb3976fbf83644df83212969\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/docs/mintlify-assets/_mintlify/favicons/ngrok/EDFj7szN2_Vn64sM/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"ngrok documentation\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#0078C4\">\u003clink data-mint-head rel=\"canonical\" href=\"https://ngrok.com/docs/gateway/k8s/guides/troubleshooting\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/docs/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/docs/gateway/k8s/guides/troubleshooting.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://ngrok.com/#organization\",\"name\":\"ngrok documentation\",\"url\":\"https://ngrok.com\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/ngrok/_7R3hf69rnKiCshG/logo/compact-light.svg?fit=max\u0026auto=format\u0026n=_7R3hf69rnKiCshG\u0026q=85\u0026s=d79c7eb9cf2273745608b35a1b312b05\"}},{\"@type\":\"WebSite\",\"@id\":\"https://ngrok.com/docs#website\",\"name\":\"ngrok documentation\",\"url\":\"https://ngrok.com/docs\",\"publisher\":{\"@id\":\"https://ngrok.com/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://ngrok.com/docs/gateway/k8s/guides/troubleshooting#webpage\",\"url\":\"https://ngrok.com/docs/gateway/k8s/guides/troubleshooting\",\"name\":\"Troubleshooting the ngrok Kubernetes Operator\",\"description\":\"Learn how to troubleshoot common issues with the ngrok Kubernetes Operator using kubectl describe, events, and logs.\",\"dateModified\":\"2026-10-28T22:35:20.532Z\",\"isPartOf\":{\"@id\":\"https://ngrok.com/docs#website\"},\"breadcrumb\":{\"@id\":\"https://ngrok.com/docs/gateway/k8s/guides/troubleshooting#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://ngrok.com/docs/gateway/k8s/guides/troubleshooting#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Connectivity\",\"item\":\"https://ngrok.com/docs/gateway/endpoints/index\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Kubernetes Operators\",\"item\":\"https://ngrok.com/docs/gateway/k8s/index\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Guides\",\"item\":\"https://ngrok.com/docs/gateway/k8s/guides/multiple-installs\"},{\"@type\":\"ListItem\",\"position\":4,\"name\":\"Troubleshooting the ngrok Kubernetes Operator\",\"item\":\"https://ngrok.com/docs/gateway/k8s/guides/troubleshooting\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://ngrok.com/docs/gateway/k8s/guides/troubleshooting#article\",\"headline\":\"Troubleshooting the ngrok Kubernetes Operator\",\"name\":\"Troubleshooting the ngrok Kubernetes Operator\",\"description\":\"Learn how to troubleshoot common issues with the ngrok Kubernetes Operator using kubectl describe, events, and logs.\",\"url\":\"https://ngrok.com/docs/gateway/k8s/guides/troubleshooting\",\"mainEntityOfPage\":{\"@id\":\"https://ngrok.com/docs/gateway/k8s/guides/troubleshooting#webpage\"},\"dateModified\":\"2026-10-28T22:35:20.532Z\",\"publisher\":{\"@id\":\"https://ngrok.com/#organization\"},\"isPartOf\":{\"@id\":\"https://ngrok.com/docs#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"ngrok documentation\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"ngrok documentation","nav":{"global":null,"tabs":[{"tab":"Start","pages":[{"title":"Start","href":"/start"}]},{"tab":"Gateway","anchors":[{"anchor":"Gateway","icon":"https://mintlify.s3.us-west-1.amazonaws.com/ngrok/img/icons/gateway.svg","pages":[{"group":"Getting Started","pages":[{"title":"Gateway Overview","sidebarTitle":"Overview","icon":"house","href":"/gateway/overview"},{"title":"CLI Quickstart","sidebarTitle":"Quickstart","icon":"rocket","href":"/gateway/endpoints/agent-cli-quickstart"},{"title":"How Does ngrok's Gateway Work?","sidebarTitle":"How It Works","icon":"gears","href":"/gateway/how-it-works"},{"title":"Points of Presence","icon":"globe","href":"/gateway/points-of-presence"}]},{"group":"Use Cases","pages":[{"group":"API Gateway","pages":[{"title":"Get Started with ngrok's API Gateway","sidebarTitle":"Get Started","href":"/gateway/api-gateway/get-started"},{"title":"Expose an MCP Server to ChatGPT, Claude, Grok, and Cursor","sidebarTitle":"Use ngrok as an MCP Gateway","href":"/gateway/api-gateway/mcp-gateway"},{"title":"Deploy a Multicloud API Gateway","href":"/gateway/api-gateway/multicloud"},{"title":"Using Datadog","href":"/gateway/api-gateway/monitor-ngrok"}]},{"group":"Device Gateway","pages":[{"title":"Device Gateway Overview","sidebarTitle":"Overview","href":"/gateway/device-gateway/overview"},{"title":"Device Gateway Quickstart","sidebarTitle":"Quickstart","href":"/gateway/device-gateway/quickstart"},{"title":"Device Gateway FAQ","sidebarTitle":"FAQ","href":"/gateway/device-gateway/faq"},{"title":"Configure Secure Access to Remote IoT Devices","sidebarTitle":"Using Remote IoT Devices","href":"/gateway/device-gateway/agent"},{"group":"Guides","pages":[{"title":"Configure Remote Connectivity to Your IoT Devices in the Field","sidebarTitle":"Cloud-to-Device","href":"/gateway/device-gateway/cloud-to-device"},{"title":"Secure Remote Access with ngrok for SSH and RDP","sidebarTitle":"Secure Remote Access","href":"/gateway/device-gateway/remote-access"},{"title":"Private Connectivity to Remote IoT Devices with ngrokd","sidebarTitle":"Private Connectivity","href":"/gateway/device-gateway/private-connectivity"},{"title":"Fleet Management","sidebarTitle":"Fleet Management","href":"/gateway/device-gateway/fleet-management"},{"title":"Connect to Devices Using the Python SDK","sidebarTitle":"Connect via SDKs","href":"/gateway/device-gateway/sdk"}]},{"group":"Concepts","pages":[{"title":"Device Security","href":"/gateway/device-gateway/security"},{"title":"Secure Tunnels for Devices","sidebarTitle":"Secure Tunnels","href":"/gateway/device-gateway/tunnels"},{"title":"Traffic Policy for Devices","sidebarTitle":"Traffic Policy","href":"/gateway/device-gateway/traffic-policy"}]},{"group":"Installation Guides","pages":[{"title":"Install ngrok on Linux","sidebarTitle":"Linux","href":"/gateway/device-gateway/linux"},{"title":"Install ngrok on Linux (ARM64)","sidebarTitle":"Linux (ARM64)","href":"/gateway/device-gateway/arm64"},{"title":"Install ngrok on Raspberry Pi","sidebarTitle":"Raspberry Pi","href":"/gateway/device-gateway/raspberry-pi"},{"title":"Install ngrok on Raspberry Pi OS (Formerly Raspbian)","sidebarTitle":"Raspberry Pi OS (Raspbian)","href":"/gateway/device-gateway/raspbian"},{"title":"Install ngrok on a Remote Windows Device","sidebarTitle":"Windows","href":"/gateway/device-gateway/windows"}]}]},{"group":"Site-to-Site Connectivity","pages":[{"title":"Site-to-Site Connectivity Overview","sidebarTitle":"Overview","href":"/gateway/site-to-site-connectivity/overview"},{"title":"Site-to-Site Connectivity Quickstart","sidebarTitle":"Quickstart","href":"/gateway/site-to-site-connectivity/quickstart"},{"title":"Connect to Your Customer's Network","sidebarTitle":"Tutorial","href":"/gateway/site-to-site-connectivity/index"},{"title":"Site-to-Site Connectivity FAQ","sidebarTitle":"FAQ","href":"/gateway/site-to-site-connectivity/faq"},{"title":"Why Your Vendor Uses ngrok","sidebarTitle":"Why Your Vendor Uses ngrok","href":"/gateway/site-to-site-connectivity/end-customers"},{"group":"Security","pages":[{"title":"Agent TLS Termination","sidebarTitle":"End-to-End Encryption","href":"/gateway/site-to-site-connectivity/agent-tls-termination"},{"title":"Region and IP Resolution","sidebarTitle":"Pin Traffic to Regions","href":"/gateway/site-to-site-connectivity/region-ip-resolution"},{"title":"Authtoken ACLs","sidebarTitle":"Restrict Agent Permissions","href":"/gateway/site-to-site-connectivity/authtoken-acls"}]},{"group":"Reliability","pages":[{"title":"Install ngrok as a Background Service","sidebarTitle":"Run ngrok in the Background","href":"/gateway/site-to-site-connectivity/background-service"},{"title":"Configure Active-Active Agent Redundancy","sidebarTitle":"Eliminate Single Points of Failure","href":"/gateway/site-to-site-connectivity/redundant-agents"},{"title":"Traffic Events and Log Export","sidebarTitle":"Monitor Agent Traffic","href":"/gateway/site-to-site-connectivity/traffic-events"},{"title":"Multi-Region Failover","sidebarTitle":"Automatic Failover","href":"/gateway/site-to-site-connectivity/multi-region-failover"}]},{"group":"Private Addressability","pages":[{"title":"Securely connect to remote customer networks from your K8s cluster","sidebarTitle":"Connect From Kubernetes","href":"/gateway/site-to-site-connectivity/customer-networks"},{"title":"Private Connectivity to Remote Customer Networks with ngrokd","sidebarTitle":"Connect from your non-k8s Environment","href":"/gateway/site-to-site-connectivity/non-k8s-environment"}]},{"group":"Production Ready","pages":[{"title":"Set Up a Custom Connect URL","sidebarTitle":"White-Label Agent Connections","href":"/gateway/site-to-site-connectivity/custom-connect-url"},{"sidebarTitle":"Use the Agent in Your Apps","title":"Create Site-to-Site Connectivity Using SDKs","href":"/gateway/site-to-site-connectivity/agent-sdks"},{"sidebarTitle":"Manage With APIs \u0026 Terraform","title":"Manage ngrok Programmatically With Terraform and API Client Libraries","href":"/gateway/site-to-site-connectivity/apis-terraform"},{"sidebarTitle":"Agent Packaging \u0026 Distribution","title":"Agent Packaging and Distribution","href":"/gateway/site-to-site-connectivity/agent-packaging"}]}]},{"group":"Webhooks to On-Prem","pages":[{"title":"Webhooks to On-Prem","sidebarTitle":"Overview","href":"/gateway/webhooks-to-on-prem/overview"},{"title":"Webhooks to On-Prem Quickstart","sidebarTitle":"Quickstart","href":"/gateway/webhooks-to-on-prem/quickstart"},{"title":"Webhooks to On-Prem Full Tutorial","sidebarTitle":"Tutorial","href":"/gateway/webhooks-to-on-prem/tutorial"},{"title":"Send GitHub Webhooks to On-Prem Jenkins Securely","sidebarTitle":"GitHub to Jenkins","href":"/gateway/webhooks-to-on-prem/github-to-jenkins"},{"title":"Send GitHub Webhooks to On-Prem Argo CD Securely","sidebarTitle":"GitHub to Argo CD","href":"/gateway/webhooks-to-on-prem/github-to-argo-cd"}]},{"group":"Security Best Practices","pages":[{"title":"Best Security Practices for Developer Productivity","sidebarTitle":"Get Started","href":"/gateway/security-dev-productivity/index"},{"title":"Security Quick Wins","href":"/gateway/security-dev-productivity/securing-your-tunnels"},{"title":"Setting up HIPAA-compliant ngrok services","sidebarTitle":"HIPAA Compliance","href":"/gateway/security-dev-productivity/hipaa-compliance"},{"title":"Secure your applications with OAuth 2.0","sidebarTitle":"Adding OAuth 2.0 to Endpoints","href":"/gateway/identity-aware-proxy/securing-with-oauth"},{"title":"Secure Remote Access with ngrok for SSH and RDP","sidebarTitle":"SSH \u0026 RDP Remote Access","href":"/gateway/ssh-rdp/index"},{"title":"Running ngrok Behind a Corporate Firewall","sidebarTitle":"Corporate Firewalls","href":"/gateway/running-behind-firewalls"}]}]},{"group":"Examples","pages":[{"title":"Gateway Examples","sidebarTitle":"Overview","href":"/gateway/examples"},{"group":"Secure and Control Access","expanded":false,"pages":[{"title":"Support Multiple Authentication Methods with Traffic Policy","sidebarTitle":"IP Restrictions or Basic Auth","href":"/gateway/examples/ip-restrictions-basic-auth"},{"title":"Secure Admin Dashboards","sidebarTitle":"Lock Down Your Admin Dashboards","href":"/gateway/examples/lock-admin-dashboards"},{"title":"Create Secure Public Developer Environments","sidebarTitle":"Secure Developer Environments","href":"/gateway/examples/secure-developer-environments"},{"title":"Validate Requests Against Identity Service","sidebarTitle":"Validate Against Identity Service","href":"/gateway/examples/validate-requests-identity"}]},{"group":"Route and Shape Traffic","expanded":false,"pages":[{"title":"Implement the 'Front Door' Pattern","sidebarTitle":"The Front Door Pattern","href":"/gateway/examples/front-door-pattern"},{"title":"Multiplex to Internal Services from a Single Domain","sidebarTitle":"Multiplex to Internal Services","href":"/gateway/examples/multiplex"},{"title":"Microservices API Gateway","href":"/gateway/examples/microservices-gateway"},{"title":"Deploy Custom Error Pages","sidebarTitle":"Custom Error Pages","href":"/gateway/examples/custom-error-pages"},{"title":"Intercept and Rewrite Headers in HTTP Redirect Responses","sidebarTitle":"Intercept and Rewrite Headers","href":"/gateway/examples/rewrite-headers-redirects"},{"title":"Route API and App Traffic by User Agent","sidebarTitle":"Route by User Agent","href":"/gateway/examples/route-api-app-traffic-user-agent"},{"title":"Route to Endpoints by Geography","href":"/gateway/examples/route-by-geography"},{"title":"Route to Services Based on OIDC Authentication","sidebarTitle":"Route by OIDC","href":"/gateway/examples/route-by-oidc"},{"title":"Offload Analytics to a Self-Hosted Service","sidebarTitle":"Offload Analytics","href":"/gateway/examples/offload-analytics"},{"title":"Pre-Tier Requests by IP Address","sidebarTitle":"Pre-Tier Requests","href":"/gateway/examples/pre-tier-requests"}]},{"group":"Connect Apps and Services","expanded":false,"pages":[{"title":"Database Gateway","href":"/gateway/examples/database-gateway"},{"title":"Webhook Gateway","href":"/gateway/examples/webhook-gateway"},{"title":"Self-Hosted PaaS Alternative Gateway","href":"/gateway/examples/paas-alternative-gateway"},{"title":"Agent-Assisted Gateway","href":"/gateway/examples/agent-assisted-gateway"},{"title":"Use a Local LLM in Cursor with Ollama","sidebarTitle":"Local LLM in Cursor","href":"/gateway/examples/cursor-local-llm"},{"title":"Secure Your Public Minecraft Server","sidebarTitle":"Secure Minecraft Server","href":"/gateway/examples/minecraft"},{"title":"Securely Put Your Self-Hosted n8n Workflows Online","sidebarTitle":"Grant Access to Your n8n Workflows","href":"/gateway/examples/n8n"},{"title":"Expose and Secure Your Self-Hosted Odoo Instance","href":"/gateway/examples/odoo"},{"title":"Ollama Remote Access: Expose and Secure Your Ollama API","sidebarTitle":"Expose Ollama API","href":"/gateway/examples/ollama"},{"title":"Accelerate and Secure Your WordPress Installation","sidebarTitle":"Secure Wordpress Installations","href":"/gateway/examples/wordpress"}]},{"group":"Ship Changes Safely","expanded":false,"pages":[{"title":"Switch Traffic Between Blue-Green Deployments","sidebarTitle":"Blue-Green Deployments","href":"/gateway/examples/blue-green-deployments"},{"title":"Distribute Traffic Between Canary Deployments","sidebarTitle":"Canary Deployments","href":"/gateway/examples/canary-deployments"},{"title":"Access CI/CD Deploy Previews on Secure URLs","sidebarTitle":"Ephemeral Workloads","href":"/gateway/examples/ephemeral-workloads"},{"title":"Deploy a Consistent Maintenance Message with Traffic Policy","sidebarTitle":"Maintenance Mode","href":"/gateway/examples/maintenance-mode"}]}]},{"group":"Connectivity","pages":[{"group":"Endpoints","pages":[{"title":"Endpoints Overview","sidebarTitle":"Overview","href":"/gateway/endpoints/index"},{"group":"Agent Endpoints","pages":[{"title":"Agent Endpoints","sidebarTitle":"Overview","href":"/gateway/endpoints/agent-endpoints"},{"title":"Agent Endpoint Protocols","sidebarTitle":"Protocols","href":"/gateway/endpoints/protocols"},{"title":"HTTP/S Agent Endpoints","sidebarTitle":"HTTP/S Endpoints","href":"/gateway/endpoints/http"},{"title":"TLS Agent Endpoints","sidebarTitle":"TLS Endpoints","href":"/gateway/endpoints/tls"},{"title":"TCP Agent Endpoints","sidebarTitle":"TCP Endpoints","href":"/gateway/endpoints/tcp"},{"title":"Endpoint Bindings","sidebarTitle":"Bindings","href":"/gateway/endpoints/bindings"},{"title":"Public Agent Endpoints","sidebarTitle":"Public Endpoints","href":"/gateway/endpoints/public-endpoints"},{"title":"Internal Agent Endpoints","sidebarTitle":"Internal Endpoints","href":"/gateway/endpoints/internal-endpoints"},{"sidebarTitle":"Kubernetes Endpoints","title":"Kubernetes Agent Endpoints","href":"/gateway/endpoints/kubernetes-endpoints"}]},{"group":"Cloud Endpoints","pages":[{"title":"Cloud Endpoints","sidebarTitle":"Overview","href":"/gateway/endpoints/cloud-endpoints/index"},{"title":"Cloud Endpoints Quickstart","sidebarTitle":"Quickstart","href":"/getting-started/cloud-endpoints-quickstart"},{"title":"Cloud Endpoint Protocols","sidebarTitle":"Protocols","href":"/gateway/endpoints/cloud-endpoints/protocols"},{"title":"HTTP/S Cloud Endpoints","sidebarTitle":"HTTP/S Endpoints","href":"/gateway/endpoints/cloud-endpoints/http"},{"title":"TLS Cloud Endpoints","sidebarTitle":"TLS Endpoints","href":"/gateway/endpoints/cloud-endpoints/tls"},{"title":"TCP Cloud Endpoints","sidebarTitle":"TCP Endpoints","href":"/gateway/endpoints/cloud-endpoints/tcp"},{"title":"Endpoint Bindings","sidebarTitle":"Bindings","href":"/gateway/endpoints/cloud-endpoints/bindings"},{"title":"Public Cloud Endpoints","sidebarTitle":"Public Endpoints","href":"/gateway/endpoints/cloud-endpoints/public-endpoints"},{"sidebarTitle":"Internal Endpoints","title":"Internal Cloud Endpoints","href":"/gateway/endpoints/cloud-endpoints/internal-endpoints"},{"sidebarTitle":"Kubernetes Endpoints","title":"Kubernetes Cloud Endpoints","href":"/gateway/endpoints/cloud-endpoints/kubernetes-endpoints"},{"title":"How to Change a Cloud Endpoint Domain","href":"/gateway/endpoints/cloud-endpoints/change-domain-endpoint"},{"title":"Forwarding Traffic to and Load Balancing Internal Endpoints with Cloud Endpoints","sidebarTitle":"Forwarding Traffic and Load Balancing","href":"/gateway/endpoints/cloud-endpoints/forwarding-and-load-balancing"},{"title":"Path-Based Routing and Policy Decentralization with Cloud Endpoints","sidebarTitle":"Path-based Routing","href":"/gateway/endpoints/cloud-endpoints/routing-and-policy-decentralization"}]},{"group":"Pooling \u0026 Load Balancing","pages":[{"title":"Endpoint Pooling","sidebarTitle":"Overview","href":"/gateway/endpoints/endpoint-pooling"},{"title":"Load Balancing Between Multiple Clouds","href":"/gateway/endpoints/load-balancing-multiple-clouds"}]}]},{"group":"Agents","root":{"title":"ngrok Agents Overview","sidebarTitle":"Overview","href":"/gateway/agent/index"},"pages":[{"title":"ngrok Agents Overview","sidebarTitle":"Overview","href":"/gateway/agent/index"},{"title":"How ngrok Agents Work","sidebarTitle":"How It Works","href":"/gateway/agent/how-it-works"},{"title":"ngrok CLI and SDK Connectivity","sidebarTitle":"Connectivity","href":"/gateway/agent/connectivity"},{"group":"CLI setup","pages":[{"title":"Install the ngrok CLI","sidebarTitle":"Install","href":"/gateway/agent/install"},{"title":"Agent Authtokens","sidebarTitle":"Authtokens","href":"/gateway/agent/authtokens"}]},{"group":"Guides","pages":[{"title":"Expose a Service with the ngrok Agent","sidebarTitle":"Expose a Service","href":"/gateway/agent/expose-a-service"},{"title":"Run the ngrok CLI as a Service","sidebarTitle":"Run as a Service","href":"/gateway/agent/service"},{"title":"SSH Reverse Tunnel","sidebarTitle":"Reverse SSH Agent","href":"/gateway/agent/ssh-reverse-tunnel-agent"},{"title":"CLI TLS Termination","sidebarTitle":"TLS Termination","href":"/gateway/agent/agent-tls-termination"},{"title":"ngrok CLI Web Inspection Interface","sidebarTitle":"Web Inspection Interface","href":"/gateway/agent/web-inspection-interface"}]},{"group":"Configuration File","pages":[{"title":"ngrok CLI Configuration File","sidebarTitle":"Overview","href":"/gateway/agent/config/index"},{"title":"Agent Config Version 3","sidebarTitle":"Version 3","href":"/gateway/agent/config/v3"},{"title":"Agent Config Version 2","sidebarTitle":"Version 2","href":"/gateway/agent/config/v2"}]},{"group":"Account and network controls","pages":[{"title":"Agent API Keys","sidebarTitle":"API Keys","href":"/gateway/agent/api-keys"},{"title":"Restrict Where Agents Connect From","sidebarTitle":"IP Restrictions","href":"/gateway/agent/ip-restrictions"},{"title":"Agent Connect URLs","sidebarTitle":"Connect URLs","href":"/gateway/agent/connect-url"}]},{"group":"Reference","pages":[{"title":"ngrok Agent Command Line Interface (CLI)","sidebarTitle":"CLI","href":"/gateway/agent/cli"},{"title":"ngrok CLI API Commands","sidebarTitle":"CLI API Commands","href":"/gateway/agent/cli-api"},{"title":"ngrok CLI API","sidebarTitle":"API","href":"/gateway/agent/api"},{"title":"ngrok Agent Changelog","sidebarTitle":"Changelog","href":"/gateway/agent/changelog"}]},{"group":"Versions","pages":[{"title":"Upgrade to ngrok Agent v3","sidebarTitle":"Upgrade to v3","href":"/gateway/agent/upgrade-v2-v3"},{"title":"ngrok Agent Version Support Policy","sidebarTitle":"Version Support Policy","href":"/gateway/agent/version-support-policy"},{"title":"Agent Version Deprecation Notices","sidebarTitle":"Deprecation Notices","href":"/gateway/agent/deprecation-notices"}]}]},{"group":"Kubernetes Operators","pages":[{"title":"Kubernetes Operator","sidebarTitle":"Overview","href":"/gateway/k8s/index"},{"title":"How the ngrok Kubernetes Operator Works","sidebarTitle":"How It Works","href":"/gateway/k8s/how-it-works"},{"title":"Kubernetes Operator Architecture","sidebarTitle":"Architecture","href":"/gateway/k8s/installation/architecture"},{"title":"Kubernetes Operator Release Process","sidebarTitle":"Releasing","href":"/gateway/k8s/releasing"},{"group":"Quickstarts","pages":[{"title":"Kubernetes Ingress Quickstart","sidebarTitle":"Ingress","href":"/getting-started/kubernetes/ingress"},{"title":"Kubernetes Custom Resources Quickstart","sidebarTitle":"Custom Resources","href":"/getting-started/kubernetes/crds"},{"title":"Kubernetes Gateway API Quickstart","sidebarTitle":"Gateway API","href":"/getting-started/kubernetes/gateway-api"},{"title":"Kubernetes Endpoints Quickstart","sidebarTitle":"Endpoints","href":"/getting-started/kubernetes/endpoints"}]},{"group":"Installation","pages":[{"title":"ngrok Kubernetes Operator Network Egress Requirements","sidebarTitle":"Network Egress","href":"/gateway/k8s/installation/network-egress"},{"title":"How to Update the ngrok Kubernetes Operator","sidebarTitle":"Updates \u0026 Upgrades","href":"/gateway/k8s/installation/update"},{"title":"Kubernetes Operator Helm Configuration","sidebarTitle":"Helm Configuration","href":"/gateway/k8s/installation/helm"},{"title":"Monitoring the Kubernetes Operator","sidebarTitle":"Observability","href":"/gateway/k8s/installation/observability"},{"title":"Uninstalling the ngrok Kubernetes Operator","sidebarTitle":"Uninstall","href":"/gateway/k8s/installation/uninstall"}]},{"group":"Load Balancing","pages":[{"title":"Load Balancing for Kubernetes Services","sidebarTitle":"For Kubernetes Services","href":"/gateway/k8s/load-balancing/load-balancing-kubernetes"},{"title":"Load Balancing Between Multiple Kubernetes Clusters","sidebarTitle":"For Kubernetes Clusters","href":"/gateway/k8s/load-balancing/load-balancing-kubernetes-clusters"}]},{"group":"How-to","pages":[{"title":"Controlling Traffic Flow with Request Routing","sidebarTitle":"Request Routing","href":"/gateway/k8s/guides/how-to/request-routing"},{"title":"TLS Routing","href":"/gateway/k8s/guides/how-to/tls-routing"},{"title":"TCP Routing","href":"/gateway/k8s/guides/how-to/tcp-routing"},{"title":"Customizing Requests with Header Manipulation","sidebarTitle":"Manipulate Headers","href":"/gateway/k8s/guides/how-to/manipulate-headers"},{"title":"Managing Traffic with Redirects","sidebarTitle":"Redirects","href":"/gateway/k8s/guides/how-to/redirects"},{"title":"Customizing Request Routing with URL Rewriting","sidebarTitle":"Rewrite URL","href":"/gateway/k8s/guides/how-to/rewrite-url"},{"title":"Serving Static Responses with Custom Response Policies","sidebarTitle":"Custom/Static Response","href":"/gateway/k8s/guides/how-to/static-response"},{"title":"Managing TLS Termination for Secure Connections","sidebarTitle":"Terminate TLS","href":"/gateway/k8s/guides/how-to/terminate-tls"},{"title":"Securing Upstream Connections with TLS \u0026 Mutual TLS (mTLS)","sidebarTitle":"Upstream TLS","href":"/gateway/k8s/guides/how-to/upstream-tls"},{"title":"Protecting Services with Rate Limiting","sidebarTitle":"Rate Limiting","href":"/gateway/k8s/guides/how-to/rate-limiting"},{"title":"Protecting Your Endpoints by Denying Unwanted Traffic","sidebarTitle":"Deny Requests","href":"/gateway/k8s/guides/how-to/deny-requests"},{"title":"Securing Endpoints with Basic Authentication","sidebarTitle":"Basic Auth","href":"/gateway/k8s/guides/how-to/basic-auth"},{"title":"Securing Your Endpoints with OAuth Authentication","sidebarTitle":"OAuth","href":"/gateway/k8s/guides/how-to/oauth"},{"title":"Authenticating Users with OpenID Connect (OIDC)","sidebarTitle":"OpenID Connect (OIDC)","href":"/gateway/k8s/guides/how-to/oidc"},{"title":"Securing Your Endpoints with JWT Validation","sidebarTitle":"JWT Validation","href":"/gateway/k8s/guides/how-to/jwt-validation"},{"title":"Controlling Access with IP Restrictions","sidebarTitle":"Restrict IPs","href":"/gateway/k8s/guides/how-to/restrict-ips"},{"title":"Restricting Access by Kubernetes Pod Identity","sidebarTitle":"Pod Identity Variables","href":"/gateway/k8s/guides/how-to/pod-identity"},{"title":"Circuit Breaking for System Reliability","sidebarTitle":"Circuit Breaking","href":"/gateway/k8s/guides/how-to/circuit-breaking"},{"title":"Improving Performance with Response Compression","sidebarTitle":"Compress Responses","href":"/gateway/k8s/guides/how-to/compress-response"}]},{"group":"Custom Resources","pages":[{"title":"Kubernetes Operator Custom Resources (CRDs)","href":"/gateway/k8s/crds/index"},{"title":"AgentEndpoint","href":"/gateway/k8s/crds/agentendpoint"},{"title":"CloudEndpoint","href":"/gateway/k8s/crds/cloudendpoint"},{"title":"NgrokTrafficPolicy","href":"/gateway/k8s/crds/ngroktrafficpolicy"},{"title":"BoundEndpoint","href":"/gateway/k8s/crds/boundendpoint"},{"title":"Domain","href":"/gateway/k8s/crds/domain"},{"title":"KubernetesOperator","href":"/gateway/k8s/crds/kubernetesoperator"},{"title":"IPPolicy","href":"/gateway/k8s/crds/ippolicy"}]},{"group":"Guides","pages":[{"title":"Running Multiple ngrok Operator Installations","sidebarTitle":"Multiple Installations","href":"/gateway/k8s/guides/multiple-installs"},{"title":"Running a Local Kubernetes Cluster","sidebarTitle":"Local Cluster Options","href":"/gateway/k8s/guides/local-cluster"},{"title":"Using ngrok Custom Resources","sidebarTitle":"Using CRDs","href":"/gateway/k8s/guides/using-crds"},{"title":"How to create endpoints in the ngrok Kubernetes Operator","sidebarTitle":"Endpoint Types","href":"/gateway/k8s/guides/endpoint-types"},{"title":"Binding Endpoints in the ngrok Kubernetes Operator","sidebarTitle":"Bindings","href":"/gateway/k8s/guides/bindings"},{"title":"Pooling Endpoints in the ngrok Kubernetes Operator","sidebarTitle":"Pooling","href":"/gateway/k8s/guides/pooling"},{"title":"Kubernetes Custom White-Label Domains","sidebarTitle":"Custom Domains","href":"/gateway/k8s/guides/custom-domain"},{"title":"Connecting to Customer Networks","href":"/gateway/k8s/guides/customer-networks"},{"title":"Projecting Local Services into Remote Clusters","sidebarTitle":"Local Projection","href":"/gateway/k8s/guides/local-projection"},{"title":"Gateway API with the ngrok Kubernetes Operator","sidebarTitle":"Using Gateway API","href":"/gateway/k8s/guides/using-gwapi"},{"title":"How the ngrok Operator Uses Ingresses","sidebarTitle":"Using Ingresses","href":"/gateway/k8s/guides/using-ingresses"},{"title":"Migrate from ingress-nginx to the ngrok Kubernetes Operator","sidebarTitle":"Migrate from ingress-nginx","href":"/gateway/k8s/guides/migrate-from-ingress-nginx"},{"title":"Custom ngrok Annotations","sidebarTitle":"Custom Annotations","href":"/gateway/k8s/guides/annotations"},{"title":"ngrok Kubernetes Operator Managed Resources","sidebarTitle":"Managed Resources","href":"/gateway/k8s/guides/managed-resources"},{"title":"Finalizers Created by the ngrok Kubernetes Operator","sidebarTitle":"Finalizers","description":"Learn about how the ngrok Kubernetes Operator uses finalizers to ensure proper cleanup of ngrok resources before deletion.","href":"/gateway/k8s/guides/finalizers"},{"title":"Troubleshooting the ngrok Kubernetes Operator","sidebarTitle":"Troubleshooting","href":"/gateway/k8s/guides/troubleshooting"},{"title":"Exposing the Kubernetes API Server with the ngrok Operator","sidebarTitle":"Expose Kubernetes API","description":"Learn how to expose the Kubernetes API server externally using the ngrok Kubernetes Operator, covering each Kubernetes authentication strategy and how to update your kubeconfig.","href":"/gateway/k8s/guides/expose-kubernetes-api"},{"title":"How the ngrok Operator Uses LoadBalancer Services","sidebarTitle":"Using LoadBalancer Services","href":"/gateway/k8s/guides/using-loadbalancers"}]}]}]},{"group":"Traffic Policy","pages":[{"title":"Traffic Policy Overview","sidebarTitle":"Overview","href":"/gateway/traffic-policy/index"},{"group":"Quickstarts","pages":[{"title":"Agent Endpoints with Traffic Policy Quickstart","sidebarTitle":"Agent Endpoints","href":"/gateway/traffic-policy/getting-started/agent-endpoints"},{"title":"Cloud Endpoints with Traffic Policy Quickstart","sidebarTitle":"Cloud Endpoints","href":"/gateway/traffic-policy/getting-started/cloud-endpoints"}]},{"title":"How Traffic Policy Works","sidebarTitle":"How It Works","href":"/gateway/traffic-policy/how-it-works"},{"group":"Concepts","pages":[{"title":"Expression Examples","sidebarTitle":"CEL Expression Examples","href":"/gateway/traffic-policy/concepts/expressions"},{"title":"Actions","sidebarTitle":"Terminating Actions","href":"/gateway/traffic-policy/concepts/actions"},{"title":"Traffic Identities","href":"/gateway/traffic-policy/identities"}]},{"group":"Actions","pages":[{"title":"Traffic Policy Actions","sidebarTitle":"Overview","href":"/gateway/traffic-policy/actions/index"},{"title":"Add Headers Action","sidebarTitle":"Add Headers","href":"/gateway/traffic-policy/actions/add-headers"},{"title":"Basic Auth Action","sidebarTitle":"Basic Auth","href":"/gateway/traffic-policy/actions/basic-auth"},{"title":"Circuit Breaker Action","sidebarTitle":"Circuit Breaker","href":"/gateway/traffic-policy/actions/circuit-breaker"},{"title":"Close Connection Action","sidebarTitle":"Close Connection","href":"/gateway/traffic-policy/actions/close-connection"},{"title":"Compress Response Action","sidebarTitle":"Compress Response","href":"/gateway/traffic-policy/actions/compress-response"},{"title":"Custom Response Action","sidebarTitle":"Custom Response","href":"/gateway/traffic-policy/actions/custom-response"},{"title":"Deny Action","sidebarTitle":"Deny","href":"/gateway/traffic-policy/actions/deny"},{"title":"Forward Internal Action","sidebarTitle":"Forward Internal","href":"/gateway/traffic-policy/actions/forward-internal"},{"title":"HTTP Request Action","sidebarTitle":"HTTP Request","href":"/gateway/traffic-policy/actions/http-request"},{"title":"JWT Validation Action","sidebarTitle":"JWT Validation","href":"/gateway/traffic-policy/actions/jwt-validation"},{"title":"Log Action","sidebarTitle":"Log","href":"/gateway/traffic-policy/actions/log"},{"title":"OAuth Action","sidebarTitle":"OAuth","href":"/gateway/traffic-policy/actions/oauth"},{"title":"OpenID Connect Action","sidebarTitle":"OpenID Connect (OIDC)","href":"/gateway/traffic-policy/actions/openid-connect"},{"title":"OWASP CRS Request Action","sidebarTitle":"OWASP CRS Request","href":"/gateway/traffic-policy/actions/owasp-crs-request"},{"title":"OWASP CRS Response Action","sidebarTitle":"OWASP CRS Response","href":"/gateway/traffic-policy/actions/owasp-crs-response"},{"title":"Rate Limit Action","sidebarTitle":"Rate Limit","href":"/gateway/traffic-policy/actions/rate-limit"},{"title":"Redirect Action","sidebarTitle":"Redirect","href":"/gateway/traffic-policy/actions/redirect"},{"title":"Remove Headers Action","sidebarTitle":"Remove Headers","href":"/gateway/traffic-policy/actions/remove-headers"},{"title":"Request Body Find \u0026 Replace Action","sidebarTitle":"Request Body Find \u0026 Replace","href":"/gateway/traffic-policy/actions/request-body-find-replace"},{"title":"Response Body Find \u0026 Replace Action","sidebarTitle":"Response Body Find \u0026 Replace","href":"/gateway/traffic-policy/actions/response-body-find-replace"},{"title":"Restrict IPs Action","sidebarTitle":"Restrict IPs","href":"/gateway/traffic-policy/actions/restrict-ips"},{"title":"SAML Action","sidebarTitle":"SAML","tag":"Early Access","href":"/gateway/traffic-policy/actions/saml"},{"title":"Set Vars Action","sidebarTitle":"Set Vars","href":"/gateway/traffic-policy/actions/set-vars"},{"title":"SSE Find \u0026 Replace Action","sidebarTitle":"SSE Find \u0026 Replace","href":"/gateway/traffic-policy/actions/sse-find-replace"},{"title":"Terminate TLS Action","sidebarTitle":"Terminate TLS","href":"/gateway/traffic-policy/actions/terminate-tls"},{"title":"URL Rewrite Action","sidebarTitle":"URL Rewrite","href":"/gateway/traffic-policy/actions/url-rewrite"},{"title":"Verify Webhook Action","sidebarTitle":"Verify Webhook","href":"/gateway/traffic-policy/actions/verify-webhook"}]},{"group":"Examples","pages":[{"title":"Traffic Policy Examples","sidebarTitle":"Overview","mode":"wide","href":"/gateway/traffic-policy/examples/index"},{"title":"How to run an A/B test","sidebarTitle":"A/B Tests","href":"/gateway/traffic-policy/examples/a-b-tests"},{"title":"Add and Remove Headers","href":"/gateway/traffic-policy/examples/add-and-remove-headers"},{"title":"Add Authentication","href":"/gateway/traffic-policy/examples/add-authentication"},{"title":"Block Unwanted Requests","href":"/gateway/traffic-policy/examples/block-unwanted-requests"},{"title":"Filter Traffic by IP Category","href":"/gateway/traffic-policy/examples/filter-by-ip-category"},{"title":"Compress JSON Responses Example","sidebarTitle":"Compress JSON Responses","href":"/gateway/traffic-policy/examples/compress-json-responses"},{"title":"Enforce TLS Example","sidebarTitle":"Enforce TLS","href":"/gateway/traffic-policy/examples/enforce-tls"},{"title":"Event Logging Example","sidebarTitle":"Event Logging","href":"/gateway/traffic-policy/examples/event-logging"},{"title":"Using OAuth Traffic Policy on Endpoints","sidebarTitle":"OAuth Protection","href":"/gateway/traffic-policy/examples/oauth-protection"},{"title":"How to Rate Limit Traffic","sidebarTitle":"Rate Limit Requests","href":"/gateway/traffic-policy/examples/rate-limit-requests"},{"title":"Route Requests","href":"/gateway/traffic-policy/examples/route-requests"},{"title":"URL Rewrites Examples","sidebarTitle":"URL Rewrites","href":"/gateway/traffic-policy/examples/url-rewrites"},{"title":"User Agent Filtering Example","sidebarTitle":"User Agent Filtering","href":"/gateway/traffic-policy/examples/user-agent-filtering"}]},{"group":"Reference","pages":[{"title":"Traffic Policy Macros Reference","sidebarTitle":"Macros","href":"/gateway/traffic-policy/macros/index"},{"group":"Variables","pages":[{"title":"Variables","sidebarTitle":"Overview","href":"/gateway/traffic-policy/variables/index"},{"title":"Action Variables","href":"/gateway/traffic-policy/variables/action"},{"title":"Connection Variables","href":"/gateway/traffic-policy/variables/connection"},{"title":"Endpoint Variables","href":"/gateway/traffic-policy/variables/endpoint"},{"title":"IP Intelligence","href":"/gateway/traffic-policy/variables/ip-intel"},{"title":"HTTP Request Variables","href":"/gateway/traffic-policy/variables/req"},{"title":"HTTP Response Variables","href":"/gateway/traffic-policy/variables/res"},{"title":"Time Variables","href":"/gateway/traffic-policy/variables/time"}]}]}]},{"group":"Observability","pages":[{"title":"Traffic Observability Overview","sidebarTitle":"Overview","href":"/obs/index"},{"group":"Traffic Inspector","root":{"title":"Traffic Inspector","sidebarTitle":"Overview","href":"/obs/traffic-inspection"},"pages":[{"title":"Traffic Inspector HTTP Requests","sidebarTitle":"HTTP Requests","href":"/obs/traffic-inspection/http-requests"},{"title":"Traffic Inspector TCP Connections","sidebarTitle":"TCP Connections","href":"/obs/traffic-inspection/tcp-connections"}]},{"group":"Log Exporting","pages":[{"title":"Events","sidebarTitle":"Overview","href":"/obs/events/index"},{"title":"Event Source Reference","href":"/obs/events/reference"}]}]},{"group":"Network","pages":[{"group":"Domains","pages":[{"title":"Domains","sidebarTitle":"Overview","href":"/gateway/domains/index"},{"title":"How to Use A Custom Domain","sidebarTitle":"Using Custom Domains","href":"/gateway/domains/custom-domains"},{"title":"Region \u0026 IP Resolution","sidebarTitle":"Region \u0026 IP Resolution","href":"/gateway/domains/region-pinning"},{"title":"TLS Termination","href":"/gateway/domains/tls-termination"},{"title":"mTLS Termination at the ngrok Edge","href":"/gateway/domains/mtls-termination"},{"title":"DDoS Protection","href":"/gateway/domains/ddos-protection"},{"title":"Global Load Balancer","href":"/gateway/domains/global-load-balancer"}]},{"group":"TCP Addresses","pages":[{"title":"IP Addresses","href":"/gateway/domains/ip-addresses"},{"title":"Dedicated IPs","tag":"Coming Soon","href":"/gateway/domains/dedicated-ips"},{"title":"TCP Addresses","href":"/gateway/domains/tcp-addresses"}]}]},{"group":"Resources","pages":[{"title":"IP Policies","sidebarTitle":"IP Policies","href":"/gateway/traffic-policy/concepts/ip-policies"},{"title":"Using Vaults \u0026 Secrets with Traffic Policy","sidebarTitle":"Vaults \u0026 Secrets","href":"/gateway/traffic-policy/secrets"},{"title":"TLS Certificates","href":"/gateway/domains/tls-certificates"}]},{"group":"Identity \u0026 Access","pages":[{"title":"Identity and Access Management Overview","sidebarTitle":"Overview","href":"/iam/index"},{"group":"Principals","pages":[{"title":"Users","href":"/iam/users"},{"title":"Service Users","href":"/iam/service-users"}]},{"group":"Account Governance","pages":[{"title":"Single Sign-On and Provisioning to the ngrok Dashboard","sidebarTitle":"Dashboard Single Sign-On","href":"/iam/sso"},{"title":"Role-Based Access Control","sidebarTitle":"RBAC","href":"/iam/rbac"},{"title":"Account Domain Controls","href":"/iam/domain-controls"}]}]}]}]},{"tab":"AI Gateway","pages":[{"title":"AI Gateway","href":"/ai-gateway/overview"}]},{"tab":"Share Localhost","pages":[{"title":"Share Localhost","href":"/share-localhost/overview"}]},{"tab":"For AI Agents","pages":[{"title":"For AI Agents","href":"/for-agents"}]},{"tab":"Integrations","pages":[{"title":"Integrations","href":"/integrations"}]},{"tab":"Reference","menu":[{"item":"Platform API","anchors":[{"anchor":"Reference","icon":"book-open","pages":[{"title":"Reference","href":"/api"}],"groups":[{"group":"Reference","pages":[{"title":"Reference","href":"/api-reference/abusereports/create"}]}]}]},{"item":"Agent API","anchors":[{"anchor":"Reference","icon":"book-open","pages":[{"title":"Reference","href":"/gateway/agent/api"}]}]},{"item":"CLI","anchors":[{"anchor":"Reference","icon":"book-open","pages":[{"title":"Reference","href":"/gateway/agent/cli"}]}]},{"item":"Agent Config File","anchors":[{"anchor":"Reference","icon":"book-open","pages":[{"title":"Reference","href":"/gateway/agent/config"}]}]},{"item":"SDKs","anchors":[{"anchor":"Reference","icon":"book-open","pages":[{"title":"Reference","href":"/agent-sdks"}]}]},{"item":"Errors","anchors":[{"anchor":"Reference","icon":"book-open","pages":[{"title":"Reference","href":"/errors"}]}]},{"item":"Changelogs","anchors":[{"anchor":"Reference","icon":"book-open","pages":[{"title":"Reference","href":"/gateway/agent/changelog"}]}]}],"pages":[{"title":"Reference","href":"/api"}]},{"tab":"Pricing","pages":[{"title":"Pricing","href":"/pricing-limits"}]},{"tab":"About","pages":[{"title":"About","href":"/about"}]}]},"basePath":"","title":"Troubleshooting the ngrok Kubernetes Operator - ngrok documentation","buildId":"dpl_CEsowfH15TDzsBT2BFbX312Be4Ct","deploymentId":"dpl_CEsowfH15TDzsBT2BFbX312Be4Ct","dynamics":[],"chunks":[]}