Chuyển đến nội dung chính

レッスン3:Service、ネットワーキング、ストレージ

Serviceタイプ(ClusterIP、NodePort、LoadBalancer、ExternalName)。CoreDNSと サービスディスカバリー。PersistentVolume、PVC、ConfigMap、Secret。

Kubernetes ServiceとNetworking — ClusterIP、NodePort、LoadBalancer

1. Serviceタイプ

Podは一時的なIPを持ち、再起動時に変わります。Serviceはラベルセレクターを通じてPodグループへの安定した仮想IP(ClusterIP)とロードバランシングを提供します。

タイプ到達可能範囲ユースケース実例
ClusterIPクラスター内部のみバックエンドマイクロサービス決済サービス → DB
NodePort外部からNodeIP:Port経由(30000-32767)開発/テスト用アクセスベアメタル上のデモアプリ
LoadBalancerクラウドLB経由で外部クラウド上の本番アプリAWS/GCPインターネットトラフィック
ExternalName外部サービスへのCNAMEエイリアス外部DNSの統合legacy-db.company.com
External Traffic
      │
      ▼
[LoadBalancer]          ← cloud provider LB (AWS ELB, GCP)
      │
[NodePort :30080]       ← all nodes expose port 30080
      │
[ClusterIP 10.96.5.3]  ← virtual IP, iptables/IPVS routing
      │
 ┌────┴────┐
[Pod A] [Pod B]        ← matched by label selector

試験のポイント: NodePortは自動的にClusterIPを作成します。LoadBalancerは自動的にNodePort + ClusterIPを作成します。各タイプは下位タイプを継承します。

2. CoreDNSとサービスディスカバリー

CoreDNSはKubernetesクラスターのデフォルトDNSサーバーです。各Serviceに自動的にDNSレコードが登録されます。

DNS format: {service}.{namespace}.svc.cluster.local

例:
  namespace "production" 内のService "api":
  → api.production.svc.cluster.local
  → api.production.svc
  → api.production
  → api  (同じnamespace内のみ)
DNSクエリ解決先利用可能な場所
apiService ClusterIP同一namespace内のみ
api.productionService ClusterIP任意のnamespace
api.production.svc.cluster.localService ClusterIP任意のnamespace(FQDN)

3. ストレージ:PV、PVC、StorageClass

Storage lifecycle:
                    STATIC                     DYNAMIC
                    ─────                      ───────
  Admin creates  → PersistentVolume     StorageClass (provision template)
  App requests   → PersistentVolumeClaim → SC auto-provisions PV
  Pod mounts     → PVC as volume
概念役割作成者
PersistentVolume (PV)実際のストレージリソース(NFS、EBS、GCE Disk)管理者またはダイナミックプロビジョナー
PersistentVolumeClaim (PVC)サイズとアクセスモードを指定したストレージ要求開発者/アプリ
StorageClassPVCがあるときにPVを自動作成するテンプレート管理者

アクセスモード

モード略称意味例
ReadWriteOnceRWO1ノードが読み書きEBSボリューム、ローカルディスク
ReadOnlyManyROX複数ノードが読み取りNFS上の静的ファイル
ReadWriteManyRWX複数ノードが読み書きNFS、EFS、GlusterFS
ReadWriteOncePodRWOP1つのPodのみ(v1.22+)排他アクセスが必要な場合

試験のポイント: AWS EBSはRWOのみサポートします。問題で複数Podの同時書き込みが要求される場合、NFS(RWX)が必要です。StatefulSetは通常、各Podに独自のPVCを持つRWOを使用します。

4. ConfigMapとSecret

リソース用途エンコーディングPodへの注入方法
ConfigMap機密でない設定(URL、フラグ、環境ファイル)プレーンテキスト環境変数、ボリュームファイル、CLIの引数
Secret機密データ(パスワード、APIキー、TLS証明書)Base64(デフォルトでは暗号化されない)環境変数(非推奨)、ボリュームマウント

試験のポイント: Secretはbase64エンコードされただけで、暗号化されていません。etcdでSecretを暗号化するには、APIサーバーでEncryption Configurationを有効にする必要があります。試験では「encrypted」が誤りの選択肢としてよく使われます。

5. チートシート

試験の質問回答
クラウドでアプリを外部公開するには?LoadBalancer(またはIngress)
namespace "backend"のService "db"のDNS名は?db.backend.svc.cluster.local
複数Pod間で共有ストレージが必要な場合は?アクセスモードRWXのPV
デプロイ時にストレージを自動プロビジョニングするには?StorageClass + PVC
Secretはデフォルトで暗号化されている?いいえ、base64のみ

6. 練習問題

Q1: 開発者が「frontend」という別のnamespaceからバックエンドデータベースService「orders-db」にアクセスしたいと考えています。どのDNS名を使用すべきですか?

  • A) orders-db
  • B) orders-db.default.svc.cluster.local
  • C) orders-db.backend.svc.cluster.local ✓
  • D) backend.orders-db.cluster.local

解説:namespace間のDNSには完全な形式が必要です:{service}.{namespace}.svc.cluster.local。短縮名「orders-db」は同一namespace内でのみ機能します。

Q2: ClusterIPとNodePortの両方を自動的に作成するServiceタイプはどれですか?

  • A) ClusterIP
  • B) NodePort
  • C) LoadBalancer ✓
  • D) ExternalName

解説:LoadBalancerはスーパーセットです。ClusterIP + NodePort + クラウドロードバランサーを作成します。NodePortはClusterIPを含みますが、ClusterIPは外部アクセスなしの単独です。

Q3: Secretにデータベースパスワードが含まれています。開発者がパスワードは「暗号化されている」と主張しています。この主張は正しいですか?

  • A) はい、Kubernetes SecretはAESで暗号化されている
  • B) いいえ、SecretはEncryption Configurationが有効でない限りbase64エンコードのみ ✓
  • C) はい、Secretはetcdの組み込み暗号化で暗号化されている
  • D) いいえ、Secretはプレーンテキストで保存される

解説:デフォルトでは、Secretはetcdにbase64エンコードされた文字列として保存されます。これは暗号化ではありません。管理者はAPIサーバーでEncryptionConfigurationを構成して保存時の暗号化を有効にする必要があります。