Serviceタイプ:ClusterIP、NodePort、LoadBalancer
Kubernetesクラスター内外にServiceを公開するさまざまな方法を学びます。
「Serviceタイプ:ClusterIP、NodePort、LoadBalancer」はCoddyKit上の無料DevOps Bootcampレッスンです。 これはレッスン2/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはDevOps Bootcamp学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 DevOps Bootcampコースには全4レッスンが含まれています。
Serviceの公開要件
Kubernetesでは、Podは一時的な存在であり、IPアドレスも動的に変わります。Serviceは、アプリケーションへの安定したネットワークアクセスを提供します。では、Serviceをどのように公開すればよいのでしょうか。
アプリケーションにクラスタ内部からアクセスする必要があるのか、外部からアクセスする必要があるのか、またその方法によって、Kubernetesでは異なるServiceタイプが用意されています。主な3種類を見ていきましょう。
ClusterIP:内部アクセス
ClusterIPはデフォルトのServiceタイプです。Serviceに安定した内部IPアドレスを割り当て、Kubernetesクラスタ内部からのみアクセスできるようにします。
- Podは、これらのClusterIPとService名を使用して、ほかのPodにアクセスできます。
- 外部に直接公開する必要のないバックエンドサービスに最適です。
- Pod用の内部ロードバランサーと考えるとよいでしょう。
ClusterIP ServiceのYAML
ServiceタイプをClusterIPとして定義する方法は次のとおりです。type: ClusterIPフィールドに注目してください。ただし、デフォルト値なので省略できます。
apiVersion: v1
kind: Service
metadata:
name: my-internal-service
spec:
selector:
app: my-app
ports:
- protocol: TCP
port: 80
targetPort: 8080
type: ClusterIPClusterIP Serviceへのアクセス
デプロイすると、KubernetesはこのServiceに一意の内部IPアドレス(ClusterIP)を自動的に割り当てます。その後、ほかのPodはService名(例:my-internal-service)またはIPアドレスを使って接続できます。
KubernetesのDNSサービスがService名をClusterIPに解決するため、内部通信を簡単かつ安定して行えます。
NodePort:外部アクセス
クラスタの外部からアプリケーションにアクセスする必要がある場合はどうすればよいでしょうか。そこで利用するのがNodePortです。
NodePort Serviceは、クラスタ内のすべてのノードのIPアドレス上にある固定ポートでアプリケーションを公開します。NodeIP:NodePort宛てのトラフィックは、Serviceにルーティングされます。
- 開発環境や小規模なデプロイに便利です。
- NodePortは通常、30000~32767の範囲です。
NodePort ServiceのYAML
NodePort Serviceを作成するには、type: NodePortを明示的に設定します。ポートを指定しない場合、KubernetesはNodePortの範囲から利用可能なポートを自動的に選択します。
apiVersion: v1
kind: Service
metadata:
name: my-nodeport-service
spec:
selector:
app: my-app
ports:
- protocol: TCP
port: 80
targetPort: 8080
nodePort: 30080 # Optional: K8s picks if omitted
type: NodePortNodePort経由で接続する
NodePort Serviceをデプロイしたら、<AnyNodeIP>:<NodePort>を使ってクラスタの外部からアプリケーションにアクセスできます。
たとえば、ノードのIPが192.168.1.100で、割り当てられたNodePortが30080の場合、http://192.168.1.100:30080でアプリケーションにアクセスできます。
LoadBalancer:クラウドとの統合
クラウドプロバイダー(AWS、GCP、Azure)上の本番環境では、LoadBalancer Serviceタイプがよく使われます。外部クラウドロードバランサーが自動的にプロビジョニングされます。
このロードバランサーはパブリックIPアドレスを取得し、外部トラフィックをServiceのPodに分散します。複雑なルーティングをすべて処理してくれます。
LoadBalancer ServiceのYAML
LoadBalancer Serviceの定義は簡単です。外部ロードバランサーのプロビジョニングは、クラウドプロバイダーが処理してくれます。
apiVersion: v1
kind: Service
metadata:
name: my-loadbalancer-service
spec:
selector:
app: my-app
ports:
- protocol: TCP
port: 80
targetPort: 8080
type: LoadBalancerLoadBalancerによる外部アクセス
デプロイすると、クラウドプロバイダーが専用のロードバランサーを作成し、外部IPアドレスまたはホスト名を割り当てます。その後、このパブリックエンドポイントを使ってアプリケーションにアクセスできます。
これにより、サービスをインターネットに公開するための堅牢でスケーラブル、かつ可用性の高い方法が提供されます。
理解度チェック:Serviceタイプ
次のKubernetes Serviceタイプのうち、クラスタの外部からアプリケーションに直接アクセスできるものはどれですか。
まとめ:Serviceの選択
Kubernetesの主な3種類のServiceタイプについて学びました。
- ClusterIP:クラスタ内部からのみアクセスする場合に使用します。
- NodePort:各ノードのIP上にある固定ポートでサービスを公開し、外部アクセスを可能にします。
- LoadBalancer:クラウドプロバイダーと連携し、パブリックIPを持つ外部ロードバランサーをプロビジョニングします。
アプリケーションの公開要件とデプロイ環境に応じて、適切なタイプを選択してください。
よくある質問
「Serviceタイプ:ClusterIP、NodePort、LoadBalancer」レッスンは無料ですか?
はい。「Serviceタイプ:ClusterIP、NodePort、LoadBalancer」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、DevOps Bootcampコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 DevOps Bootcampコースには全4レッスンが含まれています。
「Serviceタイプ:ClusterIP、NodePort、LoadBalancer」で何を学びますか?
Kubernetesクラスター内外にServiceを公開するさまざまな方法を学びます。 ブラウザで直接実行するハンズオンコードでDevOps Bootcampを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
DevOps Bootcampを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのDevOps Bootcampは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン2/4です。
「Serviceタイプ:ClusterIP、NodePort、LoadBalancer」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このDevOps Bootcampレッスンでコードを書いて実行できますか?
はい。すべてのDevOps Bootcampレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- Serviceによるアプリの公開
- Serviceタイプ:ClusterIP、NodePort、LoadBalancer
- 外部アクセスのためのIngress
- DNSとサービスディスカバリ