TL;DR(結論)
macOS Sequoia 15.5 で OrbStack を使用して Kubernetes の Ingress を構築したところ、
curlとpingは成功するが、ブラウザ(Arc等)からアクセスできない問題が発生しました。
以下の設定を行うことで解決しました。
必要な設定は1つだけ:
システム設定 > プライバシーとセキュリティ > ローカルネットワーク > ブラウザ(Arc等)を ON
不要な設定(回り道した内容):
- ❌
/etc/hostsの編集 - ❌
/etc/resolver/orbの作成 - ❌
kubectl port-forwardの使用 - ❌ DNS サーバーの手動設定
OrbStack は mDNS (Multicast DNS) で .orb.local ドメインを自動解決します。
問題の発生状況
症状
macOS Sequoia 15.5 で OrbStack を使用して Kubernetes の Ingress を構築したところ、以下の現象が発生しました:
# Terminal から curl でアクセス → ✅ 成功
$ curl http://hello.k8s.orb.local
Server address: 192.168.X.X:80
Server name: hello-<pod-id>
# ping も成功 → ✅ 成功
$ ping hello.k8s.orb.local
PING hello.k8s.orb.local (192.168.X.X): 56 data bytes
64 bytes from 192.168.139.2: icmp_seq=0 ttl=64 time=0.281 ms
しかし、ブラウザからアクセスすると:
ERR_ADDRESS_UNREACHABLE
このサイトにアクセスできません
http://192.168.X.X/ にアクセスできません。
試したこと(すべて効果なし or 実際には不要だった)
-
✅
/etc/resolver/orbを手動作成echo "nameserver 192.168.139.2" | sudo tee /etc/resolver/orb- curl は成功するが、ブラウザは失敗
-
✅
/etc/hostsにエントリを追加echo "192.168.139.2 hello.k8s.orb.local" | sudo tee -a /etc/hosts- curl は成功するが、ブラウザは失敗
-
✅ DNS キャッシュのクリア
sudo dscacheutil -flushcache sudo killall -HUP mDNSResponder- 効果なし
-
✅ OrbStack の再起動
- 効果なし
-
✅ macOS の再起動
- 効果なし
共通の症状: curl/ping は成功するが、ブラウザだけが失敗する
環境
- macOS: 15.5 (Sequoia)
- OrbStack: v2.0.4 (2000400)
- Kubernetes: v1.32.6+orb1
- ブラウザ: Arc
- Ingress Controller: nginx-ingress-controller v1.11.1
根本原因
macOS Sequoia の「ローカルネットワーク」権限
macOS 15 (Sequoia) から、アプリケーションがローカルネットワーク(192.168.x.x などのプライベート IP アドレスや mDNS)にアクセスするには、明示的に「ローカルネットワーク」権限を付与する必要があった。
なぜ curl は動作してブラウザは失敗するのか?
| アプリケーション | ローカルネットワーク権限 | 結果 |
|---|---|---|
| Terminal/curl | ✅ あり(デフォルト) | ✅ 成功 |
| Arc ブラウザ | ❌ なし | ❌ ERR_ADDRESS_UNREACHABLE
|
重要: これは OrbStack や Kubernetes の問題ではなく、macOS Sequoia のセキュリティ機能
参考 GitHub Issue:
- OrbStack #1452: orb.local domains no longer work with macOS Sequoia
- ユーザーレポート: "I am using the Arc browser and needed to allow Arc Helper (GPU) in addition to Arc."
解決方法
ステップ1: ブラウザにローカルネットワーク権限を付与
- システム設定 を開く
- プライバシーとセキュリティ をクリック
- ローカルネットワーク を選択
- リストから使用しているブラウザを探す:
- Arc (Arc ブラウザの場合)
- 他のブラウザでも同様に操作可能と思われる
- チェックボックスを オン にする
ステップ2: 動作確認
ブラウザで http://hello.k8s.orb.local にアクセス。
✅ 成功すれば完了です!
(ブラウザの再起動が必要なケースもあるかも。)
以下は自分用メモ。
ブラウザ側の設定に関する問題を乗り越えたあとの
当初やりたかったことの手順
OrbStack で Ingress 環境を構築する完全手順
ゼロから OrbStack で Kubernetes Ingress 環境を構築する手順です。
前提条件
- OrbStack がインストール済み
- Kubernetes が有効化されている
orb start k8s
1. NGINX Ingress Controller のインストール
kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.11.1/deploy/static/provider/cloud/deploy.yaml
# Ingress Controller が起動するまで待機
kubectl wait --namespace ingress-nginx \
--for=condition=ready pod \
--selector=app.kubernetes.io/component=controller \
--timeout=120s
確認:
kubectl get svc -n ingress-nginx ingress-nginx-controller
出力例:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S)
ingress-nginx-controller LoadBalancer 192.168.194.216 192.168.X.X 80:30751/TCP,443:32727/TCP
EXTERNAL-IP が割り当てられていることを確認してください。
2. サンプルアプリケーションのデプロイ
hello-app.yaml を作成:
apiVersion: apps/v1
kind: Deployment
metadata:
name: hello
spec:
replicas: 1
selector:
matchLabels:
app: hello
template:
metadata:
labels:
app: hello
spec:
containers:
- name: hello
image: nginx:alpine
ports:
- containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
name: hello
spec:
selector:
app: hello
ports:
- protocol: TCP
port: 80
targetPort: 80
デプロイ:
kubectl apply -f hello-app.yaml
# Pod が起動するまで待機
kubectl wait --for=condition=ready pod -l app=hello --timeout=60s
3. Ingress リソースの作成
hello-ingress.yaml を作成:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: hello-ingress
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
ingressClassName: nginx
rules:
- host: hello.k8s.orb.local
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: hello
port:
number: 80
重要なポイント:
-
ingressClassName: nginxの指定が必須 -
annotationsにnginx.ingress.kubernetes.io/rewrite-target: /を追加
デプロイ:
kubectl apply -f hello-ingress.yaml
確認:
kubectl get ingress
出力例:
NAME CLASS HOSTS ADDRESS PORTS AGE
hello-ingress nginx hello.k8s.orb.local 192.168.X.X 80 10s
4. 動作確認
ターミナルからテスト:
# curl でテスト
curl http://hello.k8s.orb.local
# ping でテスト
ping -c 2 hello.k8s.orb.local
ブラウザからテスト:
ブラウザで http://hello.k8s.orb.local にアクセス。
もし ERR_ADDRESS_UNREACHABLE が表示される場合は、ブラウザにローカルネットワーク権限を付与してください(上記「解決方法」参照)。
OrbStack の DNS 自動解決の仕組み
mDNS (Multicast DNS) による自動解決
OrbStack は mDNS を使用して、以下を自動的に行います:
- Kubernetes の LoadBalancer Service を検出
-
.orb.localドメインを mDNS で公開 - macOS の mDNS リゾルバーが自動的に解決
つまり、手動での DNS 設定は不要です。
検証: DNS 設定ファイルなしで動作
以下のファイルが存在しなくても、正常に動作します:
# /etc/hosts にエントリがなくても OK
$ grep hello /etc/hosts
(何も表示されない)
# /etc/resolver/orb が存在しなくても OK
$ ls /etc/resolver/orb
ls: /etc/resolver/orb: No such file or directory
# それでもアクセスできる
$ curl http://hello.k8s.orb.local
<!DOCTYPE html>
<html>...
理由: macOS の mDNS リゾルバーが .local ドメインを自動的に解決するため。
dig コマンドでは解決できないが正常
$ dig +short hello.k8s.orb.local
(何も表示されない)
これは正常です。dig は DNS サーバーにのみクエリを送るため、mDNS は使用しません。
一方、curl や ping、ブラウザは macOS のシステムリゾルバーを使用するため、mDNS で解決できます。
トラブルシューティング
ブラウザで ERR_ADDRESS_UNREACHABLE が出る
症状:
- curl/ping は成功
- ブラウザだけが
ERR_ADDRESS_UNREACHABLEエラー
原因: ブラウザにローカルネットワーク権限がない
解決:
- システム設定 > プライバシーとセキュリティ > ローカルネットワーク
- ブラウザを探してチェックボックスを ON
- ブラウザを再起動
ブラウザがローカルネットワークのリストに表示されない
解決方法:
- ブラウザを完全に終了
- ブラウザを再起動してローカル IP(例:
http://192.168.139.2)にアクセスを試みる - 権限ダイアログが表示されたら「許可」をクリック
- システム設定 > プライバシーとセキュリティ > ローカルネットワーク に表示されるはず
それでも表示されない場合は、macOS を再起動してください。
Ingress Controller の IP が取得できない
kubectl get svc -n ingress-nginx ingress-nginx-controller
EXTERNAL-IP が <pending> の場合:
- 数分待ってから再度確認
- Ingress Controller の Pod が Running か確認
kubectl get pods -n ingress-nginx - OrbStack を再起動
orb restart k8s
Ingress が 404 Not Found を返す
原因: IngressClassName や annotations が不足している
確認:
kubectl describe ingress hello-ingress
以下を確認:
-
Ingress Class: nginxが表示されているか -
Annotationsにnginx.ingress.kubernetes.io/rewrite-target: /があるか -
Backendsにサービスが正しく設定されているか
修正:
spec:
ingressClassName: nginx # ← 必須
annotations:
nginx.ingress.kubernetes.io/rewrite-target: / # ← 推奨
複数の Ingress を作成する場合
2つ目以降の Ingress も、DNS 設定なしで動作します:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: hello2-ingress
spec:
ingressClassName: nginx
rules:
- host: hello2.k8s.orb.local # ← 新しいホスト名
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: hello2
port:
number: 80
デプロイ後、すぐに http://hello2.k8s.orb.local でアクセス可能です(/etc/hosts への追加不要)。
まとめ
根本解決
macOS Sequoia で OrbStack の Ingress を使う場合、必要な設定は1つだけ:
ブラウザにローカルネットワーク権限を付与する
不要な設定(よくある誤解)
以下はすべて不要です:
| 設定 | 必要性 | 理由 |
|---|---|---|
/etc/hosts の編集 |
❌ 不要 | mDNS が自動解決 |
/etc/resolver/orb の作成 |
❌ 不要 | mDNS が自動解決 |
kubectl port-forward |
❌ 不要 | LoadBalancer が直接アクセス可能 |
| DNS サーバーの設定 | ❌ 不要 | mDNS が自動解決 |
| OrbStack の再インストール | ❌ 不要 | 権限の問題 |
注意: トラブルシューティング中に /etc/resolver/orb を手動作成することがありますが、実際には不要です。削除しても正常に動作します。
OrbStack の自動 DNS 解決
OrbStack は mDNS (Multicast DNS) を使って:
- Kubernetes の LoadBalancer Service を自動検出
-
.orb.localドメインを自動公開 - 手動設定なしで名前解決
この問題の本質
macOS Sequoia のセキュリティ強化
- macOS 15 から、アプリがローカルネットワークにアクセスするには明示的な権限が必要
- Terminal/curl はデフォルトで権限あり
- ブラウザは明示的に権限を付与する必要あり
- OrbStack や Kubernetes の問題ではなく、macOS の仕様
他の開発ツールでも同様の問題が発生する可能性
- Docker Desktop
- Rancher Desktop
- Minikube(ドライバーによる)
- その他のローカル Kubernetes 環境
すべて同じ解決方法が適用できます:ブラウザにローカルネットワーク権限を付与
参考情報
関連 GitHub Issues
-
OrbStack #1452: orb.local domains no longer work with macOS Sequoia
- macOS Sequoia でのローカルネットワーク権限の問題
- Arc ブラウザでの具体的な解決例
-
OrbStack #1451: DNS resolution not working on macOS Sequoia
- DNS 解決の問題とトラブルシューティング
-
Docker for Mac #7595: Private Relay と DNS の問題
- macOS Sequoia の Private Relay による影響
検証済み環境
- macOS: 15.5 (Sequoia)
- OrbStack: v2.0.4 (2000400)
- Kubernetes: v1.32.6+orb1
-
ブラウザ:
- Arc ✅ 動作確認済み
- Chrome, Safari でも同様の手順で動作するはず
OrbStack ドキュメント
作成日: 2025-11-01
最終更新: 2025-11-01
検証環境: macOS Sequoia 15.5, OrbStack v2.0.4, Arc 1.117.0