Kubernetes サービスを外部デバイスに公開する
Kubernetes アプリケーションを使用する場合は、デプロイしたワークロードと対話できるように、外部デバイスから Kubernetes サービスにアクセスできるようにする必要がある場合があります。 この記事では、AKS Edge Essentials クラスターで実行されている Kubernetes サービスを外部デバイスに公開する方法について説明します。 Kubernetes クラスターの設定に使用したネットワーク構成に応じて、サービスを公開する方法は 2 つあります。
- ポート転送を使用する単一マシン クラスター。
- 外部仮想スイッチを備えたスケーラブルなクラスター。
Note
Kubernetes サービスを使用する場合は、デプロイ時に必ず Init.ServiceIPRangeSize
パラメーターと Init.ServiceIPRangeStart
パラメーターを設定してください。 詳細については、「デプロイ構成 JSON パラメーターを参照してください。
オプション 1: ポート転送を使用する単一マシン クラスター
AKS Edge Essentials の単一マシン クラスター構成では、内部仮想スイッチを使用してネットワークを管理します。 このスイッチにより、Windows ホスト OS と Linux/Windows ノード間のすべての通信が、外部デバイスからアクセスできない内部ネットワークを使用して行われます。 AKS Edge Essentials ネットワークの詳細については、「AKS Edge Essentials ネットワーク」を参照してください。
外部デバイスから Kubernetes サービスにアクセスする必要がある場合は、Windows ホスト OS から Linux または Windows ノードへのポート転送を設定します。 LoadBalancer 型の Kubernetes サービスを使用している場合は、kubectl get services
コマンドを使用して正しいServiceIpを取得してください。 種類が ClusterIp または NodePort の Kubernetes サービスを使用している場合は、Linux/Windows Kubernetes ノードの IP アドレスを使用します。
ポートフォワーディングを設定するには、 netsh
コマンドレットを使用できます。 netsh
コマンド構文、コンテキスト、および書式設定の詳細については、「Netsh コマンドの構文、コンテキスト、および書式設定」を参照してください。 ポート フォワーディングを設定するには、次の手順に従います。
管理者特権の PowerShell セッションを開きます。
Windows ホスト OS 外部ポートのファイアウォール規則ポートを有効にします。 詳細については、「 New-NetFirewallRuleを参照してください。
New-NetFirewallRule -DisplayName "<name-for-rule>" -Direction Inbound -LocalPort <Windows-host-OS-external-port> -Action Allow
名前空間内のターゲット サービスの IP アドレスを取得します。
kubectl get service -n <namespace>
Windows ホスト OS ポートから Kubernetes サービスの IP アドレスとポートへのポート 転送を設定します。
パラメーター 説明 listen-port
外部デバイスが Kubernetes サービスと通信するために使用する Windows ホスト OS IPv4 ポート。 listen-address
Windows ホスト OS でリッスンする IPv4 アドレスを指定します。 アドレスが指定されない場合、既定値はローカル コンピューターです。 connect-port
トラフィックをリダイレクトする IPv4 ポートを指定します。 このポートは Kubernetes サービス ポートである必要があります。 connect-address
トラフィックをリダイレクトする IPv4 アドレスを指定します。 このポートは、Kubernetes サービスの IP アドレスである必要があります。 netsh interface portproxy add v4tov4 listenport=<listen-port> listenaddress=<listen-address> connectport=<connect-port> connectaddress=<connect-address>
次の図の例では、 10.0.0.2 IPv4 アドレスを持つ 2 つの Kubernetes サービスが Windows デバイスで実行されています。
- Linux-Svc Linux ノード
192.168.0.2
とポート30034
の IP アドレスを使用して、NodePort サービスを実行します。 このサービスは、Windows ホスト OS のポート 8080 で到達できる必要があります。 - Win-Svc IP アドレス
192.168.0.5
とポート30035
を持つ LoadBalancer サービスとして実行されます。 このサービスには、Windows ホスト OS のポート 8081 で到達できる必要があります。
これらのサービスにアクセスする外部デバイスを有効にするには、両方のサービスのポートフォワーディングを設定します。 このシナリオでは、次のコマンドを実行します。
netsh interface portproxy add v4tov4 listenport=8080 listenaddress=10.0.0.2 connectport=30034 connectaddress=192.168.0.2
netsh interface portproxy add v4tov4 listenport=8081 listenaddress=10.0.0.2 connectport=30035 connectaddress=192.168.0.5
警告
静的ネットワーク構成を使用しない場合、Windows ホスト OS の IPv4 アドレスが変更される可能性があります。 これは、ポート フォワーディングの構成と、外部デバイスで使用されるターゲット IPv4 アドレスに影響する可能性があります。 IPv4 アドレス変更の影響を最小限に抑えるために、より汎用的な listenaddress
を使用できます。
オプション 2: 外部仮想スイッチを備えたスケーラブルなクラスター
AKS Edge Essentials のスケーラブルなクラスター構成では、外部仮想スイッチを使用してネットワークを管理します。 ノードは異なるデバイス内で実行されるため、互いに通信するには、すべてのノードが同じネットワークに接続されている必要があります。 AKS Edge Essentials ネットワークの詳細については、「AKS Edge Essentials ネットワーク」を参照してください。
この構成では、Kubernetes ノードは外部ネットワークに接続されているため、Kubernetes サービスはポートフォワーディングを必要とせずに外部デバイスから到達できます。 オプション 1 のガイダンスに従って、LoadBalancer 型の Kubernetes サービスを使用している場合は、kubectl get services
コマンドを使用して正しいServiceIpを取得してください。 種類が ClusterIp または NodePort の Kubernetes サービスを使用している場合は、Linux/Windows Kubernetes ノードの IP アドレスを使用します。
Note
スケーラブルなクラスターを 1 つのデバイスに保持し、外部仮想スイッチ構成を使用して、ポートフォワーディングを必要とせずに、外部ネットワーク上の外部デバイスに直接 Kubernetes サービスを公開することができます。