はじめに
このチュートリアルでは、Kubernetesエコシステムにおける基本概念であるKubernetesサービスについて、包括的な理解を提供します。異なる種類のサービス、アプリケーションをネットワークに公開する方法、およびKubernetesサービスに関連する高度な概念について学びます。
💡 このチュートリアルは英語版からAIによって翻訳されています。原文を確認するには、 ここをクリックしてください
このチュートリアルでは、Kubernetesエコシステムにおける基本概念であるKubernetesサービスについて、包括的な理解を提供します。異なる種類のサービス、アプリケーションをネットワークに公開する方法、およびKubernetesサービスに関連する高度な概念について学びます。
Kubernetesサービスは、Kubernetesエコシステムにおける基本概念であり、ポッド内で実行されているアプリケーションをネットワークに公開する方法を提供します。サービスは、基礎となるポッドを抽象化し、クライアントがポッドの詳細を知ることなくアプリケーションに接続できるようにします。
Kubernetesは、さまざまなネットワーキング要件に対応するためにいくつかの種類のサービスを提供します。
Kubernetesサービスは、いくつかの重要なコンポーネントで構成されています。
以下は、サービスのコンフィグレーションの例です。
apiVersion: v1
kind: Service
metadata:
name: my-service
spec:
selector:
app: my-app
ports:
- port: 80
targetPort: 8080
type: LoadBalancer
この例では、サービスは、ラベル app: my-app
が付いたポッドをポート80で公開し、トラフィックをポッドのポート8080に転送します。
Kubernetesサービスを定義したら、次のステップはアプリケーションを外部に公開することです。Kubernetesにはこれを達成するためのいくつかの方法があり、それぞれ独自の利点と使用例があります。
NodePortサービスタイプは、静的なポートを使用して、各ノードのIPアドレスでアプリケーションを公開します。これにより、外部クライアントがクラスタ外からアプリケーションにアクセスできるようになります。以下は例です。
apiVersion: v1
kind: Service
metadata:
name: my-nodeport-service
spec:
type: NodePort
selector:
app: my-app
ports:
- port: 80
targetPort: 8080
この例では、サービスは、30000 - 32767の範囲でランダムに割り当てられたポートを使用して、各ノードのIPアドレスでアクセス可能になります。
ロードバランササービスタイプは、通常、クラウド環境でアプリケーション用のロードバランサをプロビジョニングします。ロードバランサはトラフィックをポッドに分散します。以下は例です。
apiVersion: v1
kind: Service
metadata:
name: my-loadbalancer-service
spec:
type: LoadBalancer
selector:
app: my-app
ports:
- port: 80
targetPort: 8080
この例では、クラウドプロバイダがロードバランサをプロビジョニングし、トラフィックをポッドに分散するように構成します。
Ingressは、高度なルーティングとロードバランシング機能を提供するKubernetesリソースです。Ingressを使用することで、単一のIPアドレスの下で複数のサービスを公開でき、SSL/TLS終了、パスベースのルーティングなどの機能を処理できます。以下はIngressのコンフィグレーションの例です。
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: my-ingress
spec:
rules:
- host: example.com
http:
paths:
- path: /api
pathType: Prefix
backend:
service:
name: my-api-service
port:
number: 80
- path: /web
pathType: Prefix
backend:
service:
name: my-web-service
port:
number: 80
この例では、Ingressは example.com
ドメインの下で、2つの異なるサービス /api
と /web
を公開します。
基本的なKubernetesサービスの種類では多くの使用例がカバーされていますが、アプリケーションのネットワーキングに対してより柔軟性と制御を提供できる高度な概念もいくつかあります。
Kubernetesは、組み込みのサービス発見メカニズムを備えており、ポッド同士が見つけ合って通信できるようにします。これは、環境変数とKubernetes DNSサーバーの使用によって達成されます。
新しいサービスが作成されると、Kubernetesは自動的に <service - name>.<namespace>.svc.cluster.local
という形式のDNS名を割り当てます。その後、ポッドはこのDNS名を使用してサービスに接続できます。
Kubernetesはまた、各サービスに対して MY_SERVICE_HOST
や MY_SERVICE_PORT
などの環境変数を注入します。ポッドはこれらの環境変数を使用してサービスに接続できます。
Kubernetesは、kube - proxy
コンポーネントを使用してサービスのネットワーキングを処理します。kube - proxy
は、必要なiptablesルールを設定し、トラフィックを適切なポッドに転送する責任があります。
Kubernetesは、iptables
や ipvs
などの複数のネットワーキングモデルをサポートしており、必要に応じて構成できます。
Kubernetesサービスは、利用可能なポッドの数に基づいて自動的にスケールアップとダウンが可能です。アプリケーションをポッドを追加または削除することでスケーリングすると、サービスは自動的にそのロードバランシングを調整してトラフィックを適切に分散します。
また、CPU使用率やカスタムメトリックなどのメトリックに基づいてアプリケーションを自動的にスケーリングする、水平ポッド自動スケーリングなどの高度なスケーリングオプションも設定できます。
以下は、水平ポッド自動スケーラの例です。
apiVersion: autoscaling/v2beta1
kind: HorizontalPodAutoscaler
metadata:
name: my - hpa
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: my - app
minReplicas: 2
maxReplicas: 10
metrics:
- type: Resource
resource:
name: cpu
targetAverageUtilization: 50
この例では、水平ポッド自動スケーラは、ポッドの平均CPU使用率に基づいて、my - app
のデプロイメントを2から10のポッドの間で自動的にスケーリングします。
このチュートリアルでは、ClusterIP、NodePort、LoadBalancerなどの異なる種類のKubernetesサービスについて学び、それらを使ってアプリケーションをネットワークに公開する方法を学びました。また、Kubernetesサービスの重要なコンポーネントとそれらを構成する方法についても検討しました。Kubernetesサービスを理解することで、ポッド内で実行されているアプリケーションを効果的に管理して公開でき、クライアントが基礎となるポッドの詳細を知ることなくアプリケーションに接続できるようになります。