ネットワークアクセスのためのService
さまざまなKubernetes Serviceタイプを使用して、クラスター内外からアプリケーションにアクセスできるようにします。
「ネットワークアクセスのためのService」はCoddyKit上の無料DevOps Bootcampレッスンです。 これはレッスン2/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはDevOps Bootcamp学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 DevOps Bootcampコースには全4レッスンが含まれています。
Kubernetes Serviceとは
Kubernetesでは、Podがデプロイ可能な最小単位です。Podは一時的なものとして設計されているため、いつでも作成、削除、置換される可能性があり、そのたびに新しいIPアドレスが割り当てられることもあります。
このように動的に変化するため、ほかのアプリケーションがPodを確実に見つけて通信するのは困難です。そこで登場するのがServiceです。

安定したネットワークアクセスの提供
KubernetesのServiceは、Podの集合に対する安定したネットワークエンドポイントとして機能します。背後にあるPodが変わっても変化しない、固定のアドレスのようなものです。
- Serviceは一貫したIPアドレスとDNS名を提供します。
- 複数のPodに対してトラフィックをロードバランシングできます。
- Podのスケールや再起動が発生しても、継続的な可用性を確保します。
PodとServiceの接続
Serviceは、どのPodにトラフィックをルーティングすればよいかをどのように判断するのでしょうか。ラベルとセレクターを使用します。
Podを作成するときに、app: my-appのようなラベル(キーと値のペア)を割り当てます。Serviceでは、これらのラベルに一致するセレクターを指定し、動的な接続を作成します。
ClusterIPによる内部アクセス
ClusterIPは、デフォルトで使用される最も一般的なServiceの種類です。Kubernetesクラスター内で安定した内部IPアドレスを割り当てます。このIPにアクセスできるのは、クラスター内部のほかのPodまたはNodeだけです。
データベースやAPIなど、アプリケーション内のほかのServiceとの通信だけが必要なバックエンドServiceに最適です。
ClusterIP Serviceの定義
以下は、ClusterIP Serviceの簡単なYAML定義です。selectorがラベルapp: my-backendと一致していること、またportがtargetPortに対応付けられていることに注目してください。
apiVersion: v1
kind: Service
metadata:
name: my-backend-service
spec:
selector:
app: my-backend
ports:
- protocol: TCP
port: 80
targetPort: 8080 # Port your application listens on
type: ClusterIPNodePortによる外部アクセス
NodePort Serviceは、各NodeのIPアドレス上にある固定ポートでアプリケーションを公開します。これにより、任意のNodeのIPアドレスと指定したポートを使って、クラスター外部からServiceにアクセスできます。
nodePortの値は通常、30000~32767の範囲です。簡単な外部アクセスや開発環境で役立ちます。
NodePort Serviceの定義
NodePortを介してServiceを外部に公開するには、type: NodePortを設定します。必要に応じてnodePortを指定できます。指定しない場合は、Kubernetesが自動的に選択します。
apiVersion: v1
kind: Service
metadata:
name: my-frontend-service
spec:
selector:
app: my-frontend
ports:
- protocol: TCP
port: 80
targetPort: 80 # Port your application listens on
nodePort: 30080 # Optional: specific port on the Node
type: NodePortクラウドロードバランサー
LoadBalancer Serviceタイプは、クラウド環境向けに設計されています。このタイプのServiceを作成すると、クラウドプロバイダー(AWS、GCP、Azureなど)が外部ロードバランサーを自動的にプロビジョニングします。
このロードバランサーにはパブリックIPアドレスが割り当てられ、外部トラフィックをPodに直接ルーティングします。多くの場合、SSL終端などの高度な機能も利用できます。
LoadBalancer Serviceの定義
クラウド上のKubernetesクラスターで一般公開するアプリケーションには、LoadBalancerが最適な選択肢です。外部アクセスの管理を大幅に簡単にできます。
apiVersion: v1
kind: Service
metadata:
name: my-web-app-lb
spec:
selector:
app: my-web-app
ports:
- protocol: TCP
port: 80
targetPort: 80
type: LoadBalancer適切なServiceの選択
チームがKubernetesに新しいアプリケーションをデプロイしようとしています。次のシナリオを考えてみましょう。
- クラスター内のほかのServiceからのみアクセスされるバックエンドAPI。
- インターネットからアクセスできる必要があり、クラウドプロバイダー(AWS、GCP、Azure)にデプロイするフロントエンドWebサーバー。
フロントエンドWebサーバーに最適なServiceタイプはどれですか?
まとめ:ネットワークアクセス用のService
KubernetesのServiceは、動的に変化するPodへの安定したネットワークアクセスを提供することを学びました。アプリケーション間の信頼性の高い通信に不可欠です。
- ClusterIP:クラスター内部の通信専用です。
- NodePort:各NodeのIPアドレス上にある固定ポートでServiceを公開し、特定の用途で外部からアクセスできるようにします。
- LoadBalancer:クラウドプロバイダーと連携し、外部ロードバランサーをプロビジョニングして一般公開します。
アプリケーションをどのように公開するかを制御するには、適切なServiceタイプを選ぶことが重要です。
よくある質問
「ネットワークアクセスのためのService」レッスンは無料ですか?
はい。「ネットワークアクセスのためのService」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、DevOps Bootcampコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 DevOps Bootcampコースには全4レッスンが含まれています。
「ネットワークアクセスのためのService」で何を学びますか?
さまざまなKubernetes Serviceタイプを使用して、クラスター内外からアプリケーションにアクセスできるようにします。 ブラウザで直接実行するハンズオンコードでDevOps Bootcampを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
DevOps Bootcampを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのDevOps Bootcampは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン2/4です。
「ネットワークアクセスのためのService」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このDevOps Bootcampレッスンでコードを書いて実行できますか?
はい。すべてのDevOps Bootcampレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- ステートレスアプリのDeployment
- ネットワークアクセスのためのService
- ConfigMapsとSecrets
- Ingressと外部ルーティング