[{"data":1,"prerenderedAt":527},["ShallowReactive",2],{"blog-ja-k3s-traefik-servicelb-ingress-nginx-port-conflict":3,"blog-related-ja-k3s-traefik-servicelb-ingress-nginx-port-conflict":471,"blog-ja-k3s-traefik-servicelb-ingress-nginx-port-conflict-alt":459},{"id":4,"title":5,"author":6,"body":7,"date":454,"description":455,"extension":456,"image":17,"locale":457,"meta":458,"navigation":459,"path":460,"seo":461,"stem":462,"tags":463,"__hash__":470},"blog\u002Fblog\u002Fja\u002Fk3s-traefik-servicelb-ingress-nginx-port-conflict.md","K3sのTraefikを無効化したはずなのに、ingress-nginxが443番を取れない。ServiceLBという見えない同居人","Kubo Team",{"type":8,"value":9,"toc":445},"minimark",[10,18,21,26,37,60,69,75,79,90,105,124,151,157,161,164,203,215,229,235,242,246,249,260,294,308,316,354,359,368,376,382,398,402,408,432,441],[11,12,13],"p",{},[14,15],"img",{"alt":16,"src":17},"title","https:\u002F\u002Fcdn.kubo.hexabase.io\u002Fimages\u002Fblog\u002Fja\u002Fk3s-traefik-servicelb-ingress-nginx-port-conflict\u002Ftitle.webp",[11,19,20],{},"K3sでTraefik無効化のフラグを実行したのに、ingress-nginxを入れてもなぜか443番ポートが取れない――この現象に心当たりがあるなら、それはTraefikのせいではない。K3sが裏で動かしているもう一つのデフォルトコンポーネントが原因だ。",[22,23,25],"h2",{"id":24},"_1-traefikを無効化したのにingress-nginxの443番ポートが取れない","1. Traefikを無効化したのに、ingress-nginxの443番ポートが取れない",[11,27,28,32,33,36],{},[29,30,31],"code",{},"--disable=traefik"," を実行し、",[29,34,35],{},"kubectl get pods -n kube-system"," でTraefik関連のPodが消えたことを確認した。そのうえでingress-nginxをLoadBalancerサービスとしてインストールした。それなのに外部IPは割り当てられるのに、443番へのアクセスがタイムアウトする、あるいは別のPodに繋がってしまう。",[11,38,39,40,47,48,53,54,59],{},"これは決して珍しい話ではない。K3sの公式ドキュメントによれば、K3sは起動時に2つの独立したネットワークコンポーネントを自動デプロイする（",[41,42,46],"a",{"href":43,"rel":44},"https:\u002F\u002Fdocs.k3s.io\u002Fnetworking\u002Fnetworking-services",[45],"nofollow","K3s公式ドキュメント: Networking Services","）。1つはTraefik（Ingress Controller）で、K3sクラスタのデフォルトIngress Controllerとして長年採用されている（",[41,49,52],{"href":50,"rel":51},"https:\u002F\u002Ftraefik.io\u002Fblog\u002Feasy-ingress-management-on-the-edge-with-k3s-lightweight-kubernetes-and-traefik-9d51c4ecacce",[45],"Traefik Labs公式ブログ: Easy Ingress Management on the Edge with K3s and Traefik","）。もう1つはServiceLB（旧称Klipper LoadBalancer）だ。NGINXとTraefikはどちらも80\u002F443番ポートを使うため、どちらかが残っていれば競合が起きる（",[41,55,58],{"href":56,"rel":57},"https:\u002F\u002Fgithub.com\u002Fk3s-io\u002Fk3s\u002Fissues\u002F2403",[45],"k3s-io\u002Fk3s Issue #2403","では、k3s導入後にnginxがIPv4の80番だけ応答しなくなった事例が報告されている）。",[11,61,62,63,68],{},"こうした「デフォルトの見えない依存関係」に気づかないまま本番投入してしまうのは、K3sクラスタ管理者なら誰しも一度は通る道だ。",[41,64,67],{"href":65,"rel":66},"https:\u002F\u002Fkubo.hexabase.io\u002F",[45],"Kubo","のようにクラスタ構成が可視化された環境であれば、この種の見落としに早い段階で気づける。",[11,70,71],{},[14,72],{"alt":73,"src":74},"section01","https:\u002F\u002Fcdn.kubo.hexabase.io\u002Fimages\u002Fblog\u002Fja\u002Fk3s-traefik-servicelb-ingress-nginx-port-conflict\u002Fsection01.webp",[22,76,78],{"id":77},"_2-犯人はtraefikではないk3sが黙って動かしていたservicelb","2. 犯人はTraefikではない。K3sが黙って動かしていた「ServiceLB」",[11,80,81,82,86,87,89],{},"ここで多くのエンジニアが見落とすのが、TraefikとServiceLBは",[83,84,85],"strong",{},"別々のフラグで管理されている独立したコンポーネント","という事実だ。",[29,88,31],{}," はTraefikだけを止める。ServiceLBは指定しない限り動き続ける。",[11,91,92,93,96,97,100,101,104],{},"ServiceLBはDaemonSetとして動作し、",[29,94,95],{},"svclb-"," というprefixのPodをクラスタ内のノードに配置し、hostPortを使ってLoadBalancerサービスにポートを割り当てる（",[41,98,46],{"href":43,"rel":99},[45],"）。つまりTraefikのLoadBalancerサービスが無くなっても、ServiceLBは",[83,102,103],{},"他のLoadBalancerサービス（ingress-nginxを含む）にも同じ仕組みでポートを割り当てようとする","。これがTraefikを無効化したのに443番が取れない直接の原因になる。",[11,106,107,108,111,112,117,118,123],{},"ServiceLBが実際に何をしているかは、k3s-io\u002Fk3s公式リポジトリのディスカッションで開発者自身が説明している。ServiceLBはノード上にDNATのiptablesルールを設定するだけの存在で、DaemonSetのPod自体はトラフィックを処理しない。ServiceLBが無ければ",[29,109,110],{},"type: LoadBalancer","のServiceは永久にpending状態のままになる、というのがそもそもの役割だ（",[41,113,116],{"href":114,"rel":115},"https:\u002F\u002Fgithub.com\u002Fk3s-io\u002Fk3s\u002Fdiscussions\u002F9927",[45],"k3s-io\u002Fk3s Discussion #9927: What does ServiceLB (Klipper LB) actually do?","）。実装としては、Service1つにつき1つのhostPortを割り当て、iptablesでクラスタIPへ転送する仕組みになっている（",[41,119,122],{"href":120,"rel":121},"https:\u002F\u002Fgithub.com\u002Fk3s-io\u002Fklipper-lb",[45],"k3s-io\u002Fklipper-lb","）。",[11,125,126,127,130,131,136,137,140,141,146,147,150],{},"TraefikがなぜK3sにデフォルト同梱されているのかについても、K3sメンテナー自身が公式ディスカッションで理由を説明している。「vanilla Kubernetesより一歩進んだ、フル機能のクラスタを最初から提供する」という設計方針であり、",[29,128,129],{},"--disable traefik","フラグで無効化できることも明言されている（",[41,132,135],{"href":133,"rel":134},"https:\u002F\u002Fgithub.com\u002Fk3s-io\u002Fk3s\u002Fdiscussions\u002F6215",[45],"k3s-io\u002Fk3s Discussion #6215: Consider dropping Traefik as a bundled component","）。しかし実際には「",[29,138,139],{},"--no-deploy traefik"," を指定してもTraefikのPodが再起動してくる」という報告（",[41,142,145],{"href":143,"rel":144},"https:\u002F\u002Fgithub.com\u002Fk3s-io\u002Fk3s\u002Fissues\u002F1160",[45],"Issue #1160","）も存在し、",[29,148,149],{},"\u002Fvar\u002Flib\u002Francher\u002Fk3s\u002Fserver\u002Fmanifests\u002Ftraefik.yaml"," を直接削除してもsystemd再起動時にK3sが再生成してしまう、という設定ファイル管理の誤解が背景にあることが多い。",[11,152,153],{},[14,154],{"alt":155,"src":156},"section02","https:\u002F\u002Fcdn.kubo.hexabase.io\u002Fimages\u002Fblog\u002Fja\u002Fk3s-traefik-servicelb-ingress-nginx-port-conflict\u002Fsection02.webp",[22,158,160],{"id":159},"_3-診断コマンドで見えない同居人の正体を確認する","3. 診断コマンドで「見えない同居人」の正体を確認する",[11,162,163],{},"ServiceLBが残っているかどうかは、次のコマンドで一発で確認できる。",[165,166,171],"pre",{"className":167,"code":168,"language":169,"meta":170,"style":170},"language-bash shiki shiki-themes tokyo-night","kubectl get pods -A | grep svclb\n","bash","",[29,172,173],{"__ignoreMap":170},[174,175,178,182,186,189,193,197,200],"span",{"class":176,"line":177},"line",1,[174,179,181],{"class":180},"sE3pS","kubectl",[174,183,185],{"class":184},"sPY7s"," get",[174,187,188],{"class":184}," pods",[174,190,192],{"class":191},"sT800"," -A",[174,194,196],{"class":195},"sAklC"," |",[174,198,199],{"class":180}," grep",[174,201,202],{"class":184}," svclb\n",[11,204,205,206,208,209,214],{},"このコマンドで ",[29,207,95],{}," から始まるPodが1つでも出力されれば、ServiceLBはまだ動いている。そもそもKubernetes公式ドキュメントが説明するように、Ingress ControllerはKubernetes本体には組み込まれておらず、クラスタごとに個別のControllerを動かす前提の仕組みだ（",[41,210,213],{"href":211,"rel":212},"https:\u002F\u002Fkubernetes.io\u002Fdocs\u002Fconcepts\u002Fservices-networking\u002Fingress-controllers\u002F",[45],"Kubernetes公式ドキュメント: Ingress Controllers","）。K3sがTraefikをデフォルトで動かしていること自体は便利だが、「代替Ingress Controllerを入れた瞬間にポート競合を引き起こす」根本原因でもあり、Traefikを止めるだけでは対策として不十分なケースがある。",[11,216,217,218,221,222,225,226,123],{},"また、",[29,219,220],{},"\u002Fvar\u002Flib\u002Francher\u002Fk3s\u002Fserver\u002Fmanifests\u002F"," 配下のマニフェストは直接編集してはならない。K3sの起動プロセスが差分を検知して元の状態に戻してしまうためだ。カスタマイズしたい場合は同じディレクトリに ",[29,223,224],{},"HelmChartConfig"," リソースを追加で置くのが正しい方法だと公式ドキュメントは説明している（",[41,227,46],{"href":43,"rel":228},[45],[11,230,231],{},[14,232],{"alt":233,"src":234},"section03","https:\u002F\u002Fcdn.kubo.hexabase.io\u002Fimages\u002Fblog\u002Fja\u002Fk3s-traefik-servicelb-ingress-nginx-port-conflict\u002Fsection03.webp",[11,236,237,238,241],{},"これはKubo Cloudのように構成状態が管理画面で可視化されていれば、CLIでの確認すら不要になる領域だ。",[41,239,67],{"href":65,"rel":240},[45],"ではCaptain UIがクラスタのIngress\u002FLoadBalancer構成を可視化するため、「デフォルトのまま残っているコンポーネント」に気づかず本番投入してしまうリスクを減らせる。",[22,243,245],{"id":244},"_4-正しい無効化手順とmetallbを使う場合の応用","4. 正しい無効化手順とMetalLBを使う場合の応用",[11,247,248],{},"TraefikとServiceLBを両方無効化したい場合、既存クラスタでは次の手順を踏む。",[250,251,252],"ol",{},[253,254,255,256,259],"li",{},"すべてのサーバーノードで ",[29,257,258],{},"\u002Fetc\u002Francher\u002Fk3s\u002Fconfig.yaml"," に以下を追記する",[165,261,265],{"className":262,"code":263,"language":264,"meta":170,"style":170},"language-yaml shiki shiki-themes tokyo-night","disable:\n  - traefik\n  - servicelb\n","yaml",[29,266,267,276,286],{"__ignoreMap":170},[174,268,269,273],{"class":176,"line":177},[174,270,272],{"class":271},"s0U2E","disable",[174,274,275],{"class":195},":\n",[174,277,279,283],{"class":176,"line":278},2,[174,280,282],{"class":281},"sgJMe","  -",[174,284,285],{"class":184}," traefik\n",[174,287,289,291],{"class":176,"line":288},3,[174,290,282],{"class":281},[174,292,293],{"class":184}," servicelb\n",[250,295,296,302],{"start":278},[253,297,298,301],{},[29,299,300],{},"sudo systemctl restart k3s"," でK3sを再起動する",[253,303,304,307],{},[29,305,306],{},"kubectl get pods -A | grep svclb"," を再実行し、出力が無いことを確認する",[11,309,310,311,123],{},"新規構築であれば、インストール時点で両方を指定すればよい（",[41,312,315],{"href":313,"rel":314},"https:\u002F\u002Foneuptime.com\u002Fblog\u002Fpost\u002F2026-02-20-metallb-k3s-servicelb-conflicts\u002Fview",[45],"oneuptime.comのMetalLB導入ガイド",[165,317,319],{"className":167,"code":318,"language":169,"meta":170,"style":170},"curl -sfL https:\u002F\u002Fget.k3s.io | INSTALL_K3S_EXEC=\"--disable servicelb --disable traefik\" sh -\n",[29,320,321],{"__ignoreMap":170},[174,322,323,326,329,332,334,337,340,343,346,348,351],{"class":176,"line":177},[174,324,325],{"class":180},"curl",[174,327,328],{"class":191}," -sfL",[174,330,331],{"class":184}," https:\u002F\u002Fget.k3s.io",[174,333,196],{"class":195},[174,335,336],{"class":180}," INSTALL_K3S_EXEC",[174,338,339],{"class":195},"=",[174,341,342],{"class":195},"\"",[174,344,345],{"class":184},"--disable servicelb --disable traefik",[174,347,342],{"class":195},[174,349,350],{"class":180}," sh",[174,352,353],{"class":184}," -\n",[355,356,358],"h3",{"id":357},"metallbを使う場合も同じ問題が起きる","MetalLBを使う場合も同じ問題が起きる",[11,360,361,362,367],{},"ServiceLBはingress-nginxだけでなく、MetalLBとも競合する。両者はどちらもLoadBalancerサービスを監視し、それぞれが外部IPを割り当てようとするため、Serviceがpendingになったり誤ったIPが割り当てられたりする「予測不能な動作」が起きる（",[41,363,366],{"href":364,"rel":365},"https:\u002F\u002Fgithub.com\u002Fk3s-io\u002Fk3s\u002Fissues\u002F2323",[45],"k3s-io\u002Fk3s Issue #2323","では、ServiceLBを無効化したはずなのにMetalLBのBGPルートがflappingし続けたという報告がある）。",[11,369,370,371,375],{},"klipper-lb（ServiceLB）とMetalLBはそもそも設計思想が異なる。ServiceLBはノード上のiptablesルールだけで動く軽量な仕組みで、外部ネットワークへのIPアドバタイズメントは行わない。一方MetalLBはL2（ARP）モードとBGPモードの両方をサポートし、外部ネットワークに対して実際にIPを広告できるため、本番のベアメタルクラスタでの利用に適している（",[41,372,374],{"href":114,"rel":373},[45],"k3s-io\u002Fk3s Discussion #9927","）。MetalLBを本番投入するなら、ServiceLBの無効化は前提条件として必ず外さないようにしたい。",[11,377,378],{},[14,379],{"alt":380,"src":381},"section04","https:\u002F\u002Fcdn.kubo.hexabase.io\u002Fimages\u002Fblog\u002Fja\u002Fk3s-traefik-servicelb-ingress-nginx-port-conflict\u002Fsection04.webp",[11,383,384,385,388,389,391,392,397],{},"K3sをベースにしたマネージドK8sである",[41,386,67],{"href":65,"rel":387},[45],"なら、こうしたIngress\u002FLoadBalancerの構成差分をAI-Driven Deploymentが検知するため、",[29,390,272],{},"フラグの反映漏れに気づかず本番でハマるリスク自体を減らせる。オンプレミス環境で同様の構成管理を求める場合は、",[41,393,396],{"href":394,"rel":395},"https:\u002F\u002Fwww.hexabase.com\u002Fproduct\u002Fkubo\u002Fon-premise",[45],"Kubo On-Premise","でも同じ思想の管理画面が提供されている。",[22,399,401],{"id":400},"_5-まとめ","5. まとめ",[11,403,404,405,407],{},"K3sのTraefik無効化は、",[29,406,31],{}," を実行しただけでは終わらない。K3sはTraefik（Ingress）とServiceLB（LoadBalancer、旧Klipper）という2つの独立したコンポーネントをデフォルトで同梱しており、それぞれ別のフラグで無効化する必要がある。",[409,410,411,414,417,422,429],"ul",{},[253,412,413],{},"症状: Traefikを無効化したのに、ingress-nginxが443番ポートを取れない",[253,415,416],{},"原因: ServiceLBがhostPortを使って他のLoadBalancerサービスにもポートを割り当て続けている",[253,418,419,420],{},"診断: ",[29,421,306],{},[253,423,424,425,428],{},"修正: ",[29,426,427],{},"disable: [traefik, servicelb]"," をconfig.yamlに追記して再起動",[253,430,431],{},"応用: MetalLBを使う場合も同様にServiceLBの無効化が前提条件になる",[11,433,434,435,440],{},"「デフォルトだから」で済ませず、K3sが同梱する2つのネットワークコンポーネントを個別に把握しておくことが、本番投入前の最後のチェックポイントになる。構成の可視化ごとKuboに任せたいという場合は、",[41,436,439],{"href":437,"rel":438},"https:\u002F\u002Fwww.hexabase.com\u002Fcontact-us\u002F",[45],"お問い合わせ","から相談してみてほしい。",[442,443,444],"style",{},"html pre.shiki code .sE3pS, html code.shiki .sE3pS{--shiki-default:#C0CAF5}html pre.shiki code .sPY7s, html code.shiki .sPY7s{--shiki-default:#9ECE6A}html pre.shiki code .sT800, html code.shiki .sT800{--shiki-default:#E0AF68}html pre.shiki code .sAklC, html code.shiki .sAklC{--shiki-default:#89DDFF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html pre.shiki code .s0U2E, html code.shiki .s0U2E{--shiki-default:#F7768E}html pre.shiki code .sgJMe, html code.shiki .sgJMe{--shiki-default:#9ABDF5}",{"title":170,"searchDepth":278,"depth":278,"links":446},[447,448,449,450,453],{"id":24,"depth":278,"text":25},{"id":77,"depth":278,"text":78},{"id":159,"depth":278,"text":160},{"id":244,"depth":278,"text":245,"children":451},[452],{"id":357,"depth":288,"text":358},{"id":400,"depth":278,"text":401},"2026-09-19","K3sでTraefik無効化を実行したのにingress-nginxが443番ポートを取れない――原因はServiceLB(klipper-lb)というもう一つのデフォルトコンポーネント。診断から正しい無効化手順、MetalLB併用時の注意まで解説する。","md","ja",{},true,"\u002Fblog\u002Fja\u002Fk3s-traefik-servicelb-ingress-nginx-port-conflict",{"title":5,"description":455},"blog\u002Fja\u002Fk3s-traefik-servicelb-ingress-nginx-port-conflict",[464,465,466,467,468,469],"k3s","kubernetes","traefik","servicelb","ingress-nginx","load-balancer","DyCERkEve_BAYiQh2Y8DBU9cAO9gmr4Vd7W3pmrjsCo",[472,481,490,499,508,517],{"path":473,"title":474,"description":475,"date":476,"tags":477},"\u002Fblog\u002Fja\u002Fk3s-pod-security-admission-restricted-servicelb-outage","restrictedを有効にしたらServiceLBが死んだ。K3sのPod Security Admissionに潜む、汎用ガイドにない設定差分","K3sでPod Security Admissionのrestrictedプロファイルを有効化したら、標準Kubernetesのガイド通りに進めたのにServiceLBが機能停止した。原因と安全な導入手順をK3s公式ハードニングガイドの記述とともに解説する。","2026-10-16",[464,465,478,479,467,480],"pod-security-admission","pod-security-standards","security",{"path":482,"title":483,"description":484,"date":485,"tags":486},"\u002Fblog\u002Fja\u002Fk3s-ingress-gateway-api-migration-traefik-gap","Ingressはもう終わる。Gateway APIに移行したら、K3sのTraefikは半分しか乗り換えられなかった","K3s Gateway API 移行を試みると、標準搭載のTraefikでもCRD未導入・Canary設定の作り直し・証明書連携の見直しが必要になる。2026年のingress-nginx退役とKubernetes 1.36移行を踏まえ、K3s特有の落とし穴と実務対応をまとめた。","2026-10-10",[464,465,487,466,488,489],"gateway-api","ingress","networking",{"path":491,"title":492,"description":493,"date":494,"tags":495},"\u002Fblog\u002Fja\u002Fk3s-cert-manager-servicelb-http01-challenge-renewal-failure","K3sでcert-managerの証明書が自動更新されない。HTTP-01チャレンジをServiceLBが奪っていた","K3sでcert-managerの証明書が更新されない原因はTraefikでもcert-manager自体でもなく、port 80\u002F443を専有するServiceLBだった。HTTP-01チャレンジが静かに失敗する仕組みと恒久対処を解説する。","2026-09-25",[464,465,496,467,497,498],"cert-manager","tls","lets-encrypt",{"path":500,"title":501,"description":502,"date":503,"tags":504},"\u002Fblog\u002Fja\u002Fk3s-networkpolicy-dual-stack-kube-router-ipv6-gap","「K3sはNetworkPolicyを無視する」は嘘だった。それでも通信が漏れていた、ServiceLBという死角","K3sはkube-router内蔵コントローラでNetworkPolicyをデフォルト強制する。それでもLoadBalancer経由の通信だけが漏れる理由は、ServiceLBの実装とNetworkPolicy APIの恒久的な制約が組み合わさった結果だった。検証手順と対処法を解説する。","2026-09-24",[464,465,505,467,506,507],"networkpolicy","kube-router","network-security",{"path":509,"title":510,"description":511,"date":512,"tags":513},"\u002Fblog\u002Fja\u002Fk3s-baremetal-loadbalancer-bgp-metallb-cilium","ベアメタルK3sのLoadBalancer、ARPだけでは限界が来る。BGPで外部ルーティングを設計する","オンプレ・エッジのK3sクラスタでクラウドLBに頼れないとき、Layer2(ARP)方式のロードバランシングはなぜ限界に達するのか。MetalLB BGPモードとCilium BGP Control Planeの違い、移行の判断基準を解説する。","2026-08-26",[464,465,514,515,469,516],"metallb","bgp","edge-computing",{"path":518,"title":519,"description":520,"date":521,"tags":522},"\u002Fblog\u002Fja\u002Fk3s-hpa-containerresource-sidecar-utilization-dilution","HPAがサイドカーの分まで合算してスケールしていた。KubernetesのContainerResourceという盲点","KubernetesのHPAはPod内の全コンテナの使用量を合算して利用率を計算するため、Istioサイドカーやログエージェントの負荷が判定を薄める。ContainerResourceメトリクスで解決する方法をK3s\u002FKubo文脈で解説する。","2026-10-21",[464,465,523,524,525,526],"hpa","containerresource","autoscaling","service-mesh",1792592611735]