見習いインフラエンジニアがkubernetesを本気で勉強してみている話 その4サービス編Service
前回に引き続きDockerから更に発展してkubernetesを学んでいるので、学んだことをつれづれなるまゝに自分の整理の為にも綴っておこうと思います。
前回はこちら
見習いインフラエンジニアがkubernetesを本気で勉強してみている話 その3デプロイメント編Deployment — Goalist Blog — Medium
サービスとは何か??利点は??
クラスタ内のポッドへのアクセスを安定して提供するための機能で、ポッドのIPアドレスが変わっても同じエンドポイントを提供することができます!
サービスの種類
- ClusterIP
デフォルトのサービスタイプ。
クラスター内の内部IPを割り当て、クラスター内の他のポッドからアクセス可能にします。
- NodePort
各ノードの特定のポートを開放し、そのポートを通じてクラスター外部からアクセス可能にします。
- LoadBalancer
クラウドプロバイダー(AWS、GCP、Azureなど)のロードバランサを利用し、外部アクセスを提供します。
- ExternalName
外部DNS名に対してサービスを設定し、内部から外部サービスへのアクセスを提供します。
How to use
serviceリソースを用いるにはまずはそのマニフェストファイルをyaml形式で記載し、それをKubernetesクラスタに適応します
例 ClusterIPタイプのサービス
apiVersion: v1
kind: Service
metadata:
name: my-service
spec:
selector:
app: MyApp
ports:
- protocol: TCP
port: 80
targetPort: 9376
このserviceリソースの作成コマンド
kubectl apply -f service.yaml
!このサービスの解説!
Selector(セレクタ)
サービスがどのポッドにトラフィックを送るかを決定するためのラベルセレクタで上記の例では、
app: MyApp というラベルを持つポッドが対象です。
PortとTargetPort
port はサービスが公開するポート番号であり
targetPort はポッド内のアプリケーションがリスニングしているポート番号を定義しています。
この定義があることでポッドのIPアドレスが変わっても問題なく通信できるわけですね~~