Files

1 line
17 KiB
JavaScript

"use strict";(globalThis.webpackChunkblog=globalThis.webpackChunkblog||[]).push([[9918],{12595:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>o,contentTitle:()=>c,default:()=>h,frontMatter:()=>i,metadata:()=>r,toc:()=>d});const r=JSON.parse('{"id":"\u4e2a\u4eba\u77e5\u8bc6\u5e93/\u7591\u96be\u6742\u75c7/k3s/Traefik\u8d44\u6e90\u8de8\u547d\u540d\u7a7a\u95f4\u8c03\u7528/README","title":"Traefik\u8d44\u6e90\u8de8\u547d\u540d\u7a7a\u95f4\u8c03\u7528","description":"|\u4f5c\u8005|\u4fee\u8ba2\u65f6\u95f4|","source":"@site/docs/\u4e2a\u4eba\u77e5\u8bc6\u5e93/04.\u7591\u96be\u6742\u75c7/01.k3s/01.Traefik\u8d44\u6e90\u8de8\u547d\u540d\u7a7a\u95f4\u8c03\u7528/README.md","sourceDirName":"\u4e2a\u4eba\u77e5\u8bc6\u5e93/04.\u7591\u96be\u6742\u75c7/01.k3s/01.Traefik\u8d44\u6e90\u8de8\u547d\u540d\u7a7a\u95f4\u8c03\u7528","slug":"/\u4e2a\u4eba\u77e5\u8bc6\u5e93/\u7591\u96be\u6742\u75c7/k3s/Traefik\u8d44\u6e90\u8de8\u547d\u540d\u7a7a\u95f4\u8c03\u7528/","permalink":"/docs/\u4e2a\u4eba\u77e5\u8bc6\u5e93/\u7591\u96be\u6742\u75c7/k3s/Traefik\u8d44\u6e90\u8de8\u547d\u540d\u7a7a\u95f4\u8c03\u7528/","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/tree/main/packages/create-docusaurus/templates/shared/docs/\u4e2a\u4eba\u77e5\u8bc6\u5e93/04.\u7591\u96be\u6742\u75c7/01.k3s/01.Traefik\u8d44\u6e90\u8de8\u547d\u540d\u7a7a\u95f4\u8c03\u7528/README.md","tags":[],"version":"current","frontMatter":{},"sidebar":"tutorialSidebar","previous":{"title":"GO-CMS\u4ee3\u7801\u5ba1\u8ba1","permalink":"/docs/\u4e2a\u4eba\u77e5\u8bc6\u5e93/\u4ee3\u7801\u5ba1\u8ba1/Go/GO-CMS\u4ee3\u7801\u5ba1\u8ba1"},"next":{"title":"\u8bed\u8a00\u77e5\u8bc6","permalink":"/docs/\u4e2a\u4eba\u77e5\u8bc6\u5e93/\u8bed\u8a00\u77e5\u8bc6/"}}');var t=s(74848),a=s(28453);const i={},c="Traefik\u8d44\u6e90\u8de8\u547d\u540d\u7a7a\u95f4\u8c03\u7528",o={},d=[{value:"\u524d\u6cbf",id:"\u524d\u6cbf",level:2},{value:"\u5229\u7528",id:"\u5229\u7528",level:2},{value:"\u5c0f\u63d2\u66f2",id:"\u5c0f\u63d2\u66f2",level:2},{value:"\u603b\u7ed3",id:"\u603b\u7ed3",level:2},{value:"\u53c2\u8003",id:"\u53c2\u8003",level:2}];function l(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",header:"header",img:"img",li:"li",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,a.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.header,{children:(0,t.jsx)(n.h1,{id:"traefik\u8d44\u6e90\u8de8\u547d\u540d\u7a7a\u95f4\u8c03\u7528",children:"Traefik\u8d44\u6e90\u8de8\u547d\u540d\u7a7a\u95f4\u8c03\u7528"})}),"\n\n\n\n\n\n\n\n\n\n\n\n\n\n",(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{style:{textAlign:"left"},children:"\u4f5c\u8005"}),(0,t.jsx)(n.th,{style:{textAlign:"left"},children:"\u4fee\u8ba2\u65f6\u95f4"})]})}),(0,t.jsx)(n.tbody,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{style:{textAlign:"left"},children:(0,t.jsx)(n.img,{src:"https://img.shields.io/badge/wjlin0-%E4%B8%AA%E4%BA%BA%E7%9F%A5%E8%AF%86%E5%BA%93-green",alt:"wjlin0"})}),(0,t.jsx)(n.td,{style:{textAlign:"left"},children:"2025-10-15 00:23:54"})]})})]}),"\n",(0,t.jsx)(n.h2,{id:"\u524d\u6cbf",children:"\u524d\u6cbf"}),"\n",(0,t.jsxs)(n.p,{children:["\u5728\u7814\u7a76",(0,t.jsx)(n.code,{children:"traefik"}),"\u8de8\u547d\u540d\u7a7a\u95f4\u8c03\u7528\u8d44\u6e90\u65f6\uff0c\u53d1\u73b0\u6709\u4e00\u4e2a\u975e\u5e38\u5751\u4eba\u7684\u70b9\uff0c\u5c31\u662f ",(0,t.jsx)(n.code,{children:"traefik"}),"\u6587\u6863\u6709\u4e00\u4e2a\u4e1c\u897f\u53eb \u8de8\u670d\u52a1\u5546\u547d\u540d\u7a7a\u95f4",(0,t.jsx)(n.code,{children:"(Provider Namespace)"}),"\uff0c\u8fd9\u4e2a\u662f\u4ec0\u4e48\u4e1c\u897f\u5462\uff0c\u5c31\u662f\u5982\u679c\u4f60\u5728 ",(0,t.jsx)(n.code,{children:"k3s/k8s"}),"\u4e2d\u6709\u9700\u8981\u5bf9docker\u63d0\u4f9b\u5546\u521b\u5efa\u7684\u8d44\u6e90\u8fdb\u884c\u8c03\u7528\u65f6\uff0c\u4f60\u53ef\u4ee5\u5f00\u542f\u8de8\u670d\u52a1\u5546\u547d\u540d\u7a7a\u95f4\u3002\u8fd8\u6709\u4e00\u4e2a\u5c31\u662f",(0,t.jsx)(n.code,{children:"Kubernetes"}),"\u81ea\u5e26\u7684\u547d\u540d\u7a7a\u95f4\uff0c\u6211\u4eec\u9700\u8981\u64cd\u4f5c\u7684\u5c31\u662f\u8fd9\u4e2a\u547d\u540d\u7a7a\u95f4\u3002"]}),"\n",(0,t.jsxs)(n.p,{children:["\u8fd9\u91cc\u7684",(0,t.jsx)(n.code,{children:"namespace: default"})]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-yaml",children:"apiVersion: traefik.io/v1alpha1\nkind: IngressRoute\nmetadata:\n name: default\n namespace: default # \u5c31\u662f\u8fd9\u4e2a\u5b57\u6bb5\nspec:\n entryPoints:\n - websecure # \u4f7f\u7528 HTTPS\n - web # HTTP\n routes:\n - match: Host(`www.wjlin0.com`) && PathPrefix(`/`) # \n kind: Rule\n services:\n - name: default\n"})}),"\n",(0,t.jsx)(n.h2,{id:"\u5229\u7528",children:"\u5229\u7528"}),"\n",(0,t.jsxs)(n.p,{children:["\u5982\u4f55\u8fdb\u884c",(0,t.jsx)(n.strong,{children:"\u8de8\u547d\u540d\u7a7a\u95f4\u8d44\u6e90\u8c03\u7528"}),"\u5462\uff0c\u5728",(0,t.jsx)(n.code,{children:"traefik"}),"\u6587\u6863\u4e2d\u63d0\u5230\u6709\u4e2a\u53c2\u6570",(0,t.jsx)(n.code,{children:"allowCrossNamespace"}),"\uff0c\u8fd9\u4e2a\u53c2\u6570\u662f\u63a7\u5236",(0,t.jsx)(n.strong,{children:"\u8de8\u547d\u540d\u7a7a\u95f4\u8d44\u6e90\u8c03\u7528"}),"\uff0c\uff08\u9ed8\u8ba4\u5173\u95ed\u7684\uff0c\u4e0d\u5141\u8bb8",(0,t.jsx)(n.strong,{children:"\u8de8\u547d\u540d\u7a7a\u95f4\u8d44\u6e90\u8c03\u7528"}),"\uff09\u3002"]}),"\n",(0,t.jsx)(n.p,{children:"\u8fd9\u662fhelm\u5b89\u88c5\uff0c\u53c2\u6570\u6240\u5728\u4f4d\u7f6e."}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-yaml",children:"......\n......\n......\n# -- Define [Startup Probe](https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes/#define-startup-probes)\nstartupProbe: {}\n\nproviders: # @schema additionalProperties: false\n kubernetesCRD:\n # -- Load Kubernetes IngressRoute provider\n enabled: true\n # -- Allows IngressRoute to reference resources in namespace other than theirs\n allowCrossNamespace: true\n......\n......\n"})}),"\n",(0,t.jsxs)(n.p,{children:["\u5f00\u542f\u540e\uff0c\u914d\u7f6e",(0,t.jsx)(n.strong,{children:"\u8de8\u547d\u540d\u7a7a\u95f4\u8d44\u6e90\u8c03\u5ea6"}),"\uff0c\u9700\u8981\u9075\u5b88\u4ee5\u4e0b\u547d\u540d\u89c4\u5219\u3002"]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-tex",children:"<\u8d44\u6e90\u547d\u540d\u7a7a\u95f4>-<\u8d44\u6e90\u540d\u79f0>@\u63d0\u4f9b\u5546\n"})}),"\n",(0,t.jsx)(n.p,{children:"\u4e86\u89e3\u4e86\u4e0a\u8bc9\u7684\u64cd\u4f5c\u6b65\u9aa4\uff0c\u6211\u4eec\u5e94\u8be5\u600e\u4e48\u505a\u5462\uff0c\u6211\u63a5\u4e0b\u6765\u7ed9\u51fa\u4e00\u4e2a\u6848\u4f8b\uff1b"}),"\n",(0,t.jsxs)(n.p,{children:["\u9700\u6c42\u65f6\uff0c\u6211\u5c06",(0,t.jsx)(n.code,{children:"k3s-apiserver"}),"\u7684",(0,t.jsx)(n.code,{children:"ping"}),"\u76ee\u5f55\uff0c\u901a\u8fc7",(0,t.jsx)(n.code,{children:"traefik"}),"\uff0c\u5bfc\u51fa\u5230\u5916\u90e8\u8bbf\u95ee\u3002"]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-yaml",children:"apiVersion: traefik.io/v1alpha1\nkind: IngressRoute\nmetadata:\n name: kubernetes-ping-ingressroute\n namespace: default\nspec:\n entryPoints:\n - websecure # \u4f7f\u7528 HTTPS\n - web # HTTP\n routes:\n - match: Host(`kube.wjlin0.com`) && PathPrefix(`/ping`) \n kind: Rule\n services:\n - name: kubernetes # \n port: 443 \n scheme: https\n"})}),"\n",(0,t.jsxs)(n.p,{children:["\u5728\u4e0a\u8bc9\u914d\u7f6e\u4e2d\u6211\u4eec\u6210\u529f\u5c06\u670d\u52a1",(0,t.jsx)(n.code,{children:"kubernetes"}),"\u5bfc\u51fa\u5230\u5916\u90e8\u8bbf\u95ee\uff0c\u4f46\u662f\u4f60\u8bbf\u95ee\u4e4b\u540e\u4f1a\u53d1\u73b0\uff0c\u8be5\u8def\u7531\u7206500\u7684\u9519\u8bef"]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-sh",children:"\u279c ~ curl https://kube.wjlin0.com/ping\nInternal Server Error\n\u279c ~\n"})}),"\n",(0,t.jsxs)(n.p,{children:["\u8fd9\u662f\u56e0\u4e3a",(0,t.jsx)(n.code,{children:"kubernetes"}),"\u7684\u8bc1\u4e66\u662f\u81ea\u7b7e\u8bc1\u4e66\uff0c\u4f60\u9700\u8981\u5bf9\u8be5\u8bc1\u4e66\u8fdb\u884c\u5f15\u7528\u6216\u8005\u5ffd\u7565\u3002\u9996\u5148\u6211\u4eec\u627e\u5230\u8fd9\u4e2a\u8bc1\u4e66\uff0c\u5b83\u4f4d\u4e8e\u670d\u52a1\u5668\u7684"]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-sh",children:"/var/lib/rancher/k3s/server/tls/serving-kube-apiserver.crt\n"})}),"\n",(0,t.jsx)(n.p,{children:"\u7136\u540e\u6211\u4eec\u5c06 \u8bc1\u4e66 base64 \u8f6c\u6362\u3002"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{children:"base64 -w 0 /var/lib/rancher/k3s/server/tls/serving-kube-apiserver.crt\n"})}),"\n",(0,t.jsxs)(n.p,{children:["\u7136\u540e\u901a\u8fc7",(0,t.jsx)(n.code,{children:"rootCAsSecrets"})," \u5f15\u7528\u8fdb\u6765\uff0c\u5f53\u7136\u4f60\u53ef\u4ee5\u90fd\u4fdd\u5b58\u5728",(0,t.jsx)(n.code,{children:"default"}),"\uff0c\u8fd9\u91cc\u662f\u5728\u6f14\u793a\u5982\u4f55\u8de8\u547d\u540d\u7a7a\u95f4\u8c03\u7528\u3002"]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-yaml",children:"apiVersion: traefik.io/v1alpha1\nkind: IngressRoute\nmetadata:\n name: kubernetes-ping-ingressroute\n namespace: default\nspec:\n entryPoints:\n - websecure # \u4f7f\u7528 HTTPS\n - web # HTTP\n routes:\n - match: Host(`kube.wjlin0.com`) && PathPrefix(`/ping`) # \u66ff\u6362\u4e3a\u4f60\u7684\u57df\u540d\n kind: Rule\n services:\n - name: kubernetes # \u66ff\u6362\u4e3a\u4f60\u7684\u670d\u52a1\u540d\u79f0\n port: 443 # \u66ff\u6362\u4e3a\u4f60\u7684\u670d\u52a1\u7aef\u53e3\n# strategy: RoundRobin # \u8d1f\u8f7d\u5747\u8861\u7b56\u7565\uff0c\u9ed8\u8ba4\u4e3a RoundRobin\n serversTransport: kube-system-kubernetes@kubernetescrd\n---\napiVersion: traefik.io/v1alpha1\nkind: ServersTransport\nmetadata:\n name: kubernetes\n namespace: kube-system\nspec:\n insecureSkipVerify: false\n rootCAsSecrets:\n - k3s-serving-kube-apiserver\n---\napiVersion: v1\nkind: Secret\nmetadata:\n name: k3s-serving-kube-apiserver\n namespace: kube-system\ndata:\n ca.crt: ......\n"})}),"\n",(0,t.jsx)(n.p,{children:"\u518d\u6b21\u8fdb\u884c\u547d\u4ee4"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-sh",children:"\u279c ~ curl https://kube.wjlin0.com/ping\npong\n\u279c ~\n"})}),"\n",(0,t.jsx)(n.h2,{id:"\u5c0f\u63d2\u66f2",children:"\u5c0f\u63d2\u66f2"}),"\n",(0,t.jsx)(n.p,{children:"\u26a0\ufe0f \u5c0f\u63d2\u66f2\uff0c\u8fd9\u91cc\u9047\u5230\u4e00\u4e2a\u95ee\u9898\u5c31\u662f\u5982\u4e0b."}),"\n",(0,t.jsxs)(n.p,{children:["\u6211\u4f7f\u7528\u4e0b\u9762\u7684\u914d\u7f6e \u901a\u8fc7 ",(0,t.jsx)(n.code,{children:"traefik"})," \u5427 ",(0,t.jsx)(n.code,{children:"kubernetes"})," \u670d\u52a1\u7aef\u7684 ping \u76ee\u5f55\u5bfc\u51fa\u6765\uff0c\u7136\u800c \u51fa\u73b0\u4e86\u8bc1\u4e66\u9519\u8bef 500"]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-yaml",children:"apiVersion: traefik.io/v1alpha1\nkind: IngressRoute\nmetadata:\n name: kubernetes-ping-ingressroute\n namespace: default\nspec:\n entryPoints:\n - websecure # \u4f7f\u7528 HTTPS\n - web # HTTP\n routes:\n - match: Host(`kube.wjlin0.com`) && PathPrefix(`/ping`) # \u66ff\u6362\u4e3a\u4f60\u7684\u57df\u540d\n kind: Rule\n services:\n - name: kubernetes\n port: 443 # \u66ff\u6362\u4e3a\u4f60\u7684\u670d\u52a1\u7aef\u53e3\n scheme: https\n serversTransport: kube-system-kubernetes@kubernetescrd\n---\napiVersion: traefik.io/v1alpha1\nkind: ServersTransport\nmetadata:\n name: kubernetes\n namespace: kube-system\nspec:\n serverName: kubernetes.default.svc\n insecureSkipVerify: false\n rootCAsSecrets:\n - k3s-serving\n certificatesSecrets:\n - k3s-serving\n"})}),"\n",(0,t.jsx)(n.p,{children:"\u8fd9\u662f\u6211\u7684\u9519\u8bef"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-tex",children:'2024-12-31T19:01:08+08:00 DBG github.com/traefik/traefik/v3/pkg/proxy/httputil/proxy.go:113 > 500 Internal Server Error error="tls: failed to verify certificate: x509: certificate signed by unknown authority"\n'})}),"\n",(0,t.jsxs)(n.p,{children:["\u4e8b\u5b9e\u4e0a ",(0,t.jsx)(n.code,{children:"k3s-serving"})," \u8fd9\u4e2a\u662f k3s \u7684 \u7684\u8bc1\u4e66"]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-sh",children:"\u279c ~ k get secrets -n kube-system k3s-serving -o yaml\napiVersion: v1\ndata:\n tls.crt: ..........\n tls.key: .......\nkind: Secret\nmetadata:\n .......\n .......\n .......\n name: k3s-serving\n namespace: kube-system\ntype: kubernetes.io/tls\n"})}),"\n",(0,t.jsx)(n.p,{children:"\u6211\u5c1d\u8bd5\u53bb\u89e3\u51b3\u5b83 \uff0c\u4e8e\u662f\u6211\u521b\u5efa\u4e86\u4e00\u4e2a sercert ,\u53d1\u73b0\u5b83 \u80fd\u591f\u8bbf\u95ee\u4e86"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-yaml",children:"apiVersion: traefik.io/v1alpha1\nkind: IngressRoute\nmetadata:\n name: kubernetes-ping-ingressroute\n namespace: default\nspec:\n entryPoints:\n - websecure # \u4f7f\u7528 HTTPS\n - web # HTTP\n routes:\n - match: Host(`kube.wjlin0.com`) && PathPrefix(`/ping`) # \u66ff\u6362\u4e3a\u4f60\u7684\u57df\u540d\n kind: Rule\n services:\n - name: kubernetes\n port: 443 # \u66ff\u6362\u4e3a\u4f60\u7684\u670d\u52a1\u7aef\u53e3\n scheme: https\n serversTransport: kube-system-kubernetes@kubernetescrd\n---\napiVersion: traefik.io/v1alpha1\nkind: ServersTransport\nmetadata:\n name: kubernetes\n namespace: kube-system\nspec:\n serverName: kubernetes.default.svc\n insecureSkipVerify: false\n rootCAsSecrets:\n - meta\n certificatesSecrets:\n - k3s-serving\n---\napiVersion: v1\nkind: Secret\nmetadata:\n name: meta\n namespace: kube-system\ndata:\n ca.crt: ..... # the k3s crt base64\n"})}),"\n",(0,t.jsxs)(n.p,{children:["\u6211\u627e\u5230\u4e00\u4e2a\u7c7b\u4f3c\u7684\u95ee\u9898 ",(0,t.jsx)(n.a,{href:"https://github.com/traefik/traefik/issues/7788",children:"#7788"})]}),"\n",(0,t.jsxs)(n.p,{children:["\u7ffb\u4e86\u4e00\u4e0b\u6e90\u4ee3\u7801\uff0c\u53d1\u73b0\u53ea\u5bf9",(0,t.jsx)(n.code,{children:"ca.crt"}),"\u3001",(0,t.jsx)(n.code,{children:"tls.ca"}),"\u548c\u4e00\u4e2a\u51fa\u73b0\u7684",(0,t.jsx)(n.code,{children:"\u5bc6\u94a5"})]}),"\n",(0,t.jsx)(n.h2,{id:"\u603b\u7ed3",children:"\u603b\u7ed3"}),"\n",(0,t.jsxs)(n.p,{children:["traefik\u9ed8\u8ba4\u4e0d\u5f00\u542f\u8de8\u547d\u540d\u8c03\u7528\uff0c\u5982\u679c\u9700\u8981\uff0c\u9700\u8981\u5728\u5b89\u88c5\u65f6\uff0c\u6253\u5f00\u914d\u7f6e",(0,t.jsx)(n.code,{children:"allowCrossNamespace"}),"\u4e3a",(0,t.jsx)(n.code,{children:"true"}),"\uff0c\u5e76\u4f7f\u7528",(0,t.jsx)(n.a,{href:"https://doc.traefik.io/traefik/providers/overview/#provider-namespace",children:"\u547d\u540d\u89c4\u5219"})]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-text",children:"When you declare certain objects in the Traefik dynamic configuration, such as middleware, services, TLS options or server transports, they reside in their provider's namespace. For example, if you declare a middleware using a Docker label, it resides in the Docker provider namespace.\n\nIf you use multiple providers and wish to reference such an object declared in another provider (e.g. referencing a cross-provider object like middleware), then the object name should be suffixed by the @ separator, and the provider name.\n\nFor the list of the providers names, see the supported providers table below.\n\n<resource-name>@<provider-name>\n\nAs Kubernetes also has its own notion of namespace, one should not confuse the provider namespace with the Kubernetes Namespace of a resource when in the context of cross-provider usage.\n\nIn this case, since the definition of a Traefik dynamic configuration object is not in Kubernetes, specifying a Kubernetes Namespace when referring to the resource does not make any sense.\n\nOn the other hand, if you were to declare a middleware as a Custom Resource in Kubernetes and use the non-CRD Ingress objects, you would have to add the Kubernetes Namespace of the middleware to the annotation like this <middleware-namespace>-<middleware-name>@kubernetescrd.\n"})}),"\n",(0,t.jsx)(n.h2,{id:"\u53c2\u8003",children:"\u53c2\u8003"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.a,{href:"https://doc.traefik.io/traefik/providers/overview/#provider-namespace",children:"https://doc.traefik.io/traefik/providers/overview/#provider-namespace"})}),"\n"]})]})}function h(e={}){const{wrapper:n}={...(0,a.R)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(l,{...e})}):l(e)}},28453:(e,n,s)=>{s.d(n,{R:()=>i,x:()=>c});var r=s(96540);const t={},a=r.createContext(t);function i(e){const n=r.useContext(a);return r.useMemo(function(){return"function"==typeof e?e(n):{...n,...e}},[n,e])}function c(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:i(e.components),r.createElement(a.Provider,{value:n},e.children)}}}]);