こんにちは。よっしーです(^^)
今日は、Docker Desctop for Mac で有効にしたKubernates上で起動させたnginxにブラウザでアクセスする方法についてご紹介します。
前回の記事
この記事は下記の記事の続きになりますので、気になる方は下記の記事も参考にしてください。
Deployment
今回の記事で使用するDeploymentファイル(nginx-deployment.yaml)は下記になります。前回の記事で使用したDeploymentファイルと同じです。
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
labels:
app: nginx
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.16.1
ports:
- containerPort: 80
Service
下記の内容で新規ファイル(nginx-service.yaml)を作成します。
apiVersion: v1 # Serviceの場合は「v1」固定
kind: Service # Serviceを指定
metadata:
name: nginx-service # Serviceの名前(任意の名前を付与)を指定
spec: # Podのポリシーの定義
type: NodePort
ports:
- port: 80
nodePort: 30000
selector:
app: nginx # Deploymentで指定したPodの名前を指定
動作確認
下記のコマンドを実行して、Podが作成されていることを確認します。
% kubectl get pods
NAME READY STATUS RESTARTS AGE
nginx-deployment-68fc675d59-hlw4x 1/1 Running 1 (22m ago) 23h
nginx-deployment-68fc675d59-r58dm 1/1 Running 1 (22m ago) 23h
nginx-deployment-68fc675d59-thp8p 1/1 Running 1 (22m ago) 23h
もし、上記のような出力になっていなければ、下記のコマンドを実行して、Podを作成します。
kubectl apply -f nginx-deployment.yaml
下記のコマンドを実施して、下記のように出力されていれば、成功です。
% kubectl apply -f nginx-service.yaml
service/nginx-service created
% kubectl get services
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 2d5h
nginx-service NodePort 10.98.105.198 <none> 80:30000/TCP 52s
ブラウザから http://localhost:30000/ にアクセスして下図のようになれば成功です。
解説
Serviceとは
KubernetesにおけるService(サービス)は、Kubernetesクラスタ内の複数のPod(コンテナの実行インスタンス)に対して一意のネットワークエンドポイントを提供するリソースです。Serviceは、Podのセット(Podのラベルセレクタに基づいて一致する一連のPod)に対して、単一の仮想IPアドレス(クラスタ内部のIPアドレス)とポート番号の組み合わせを公開します。
Serviceは、Kubernetesクラスタ内部の通信を簡素化するために使用されます。クライアントアプリケーションは、ServiceのIPアドレスとポート番号を使用して、バックエンドのPodに対してリクエストを送信することができます。Serviceは、バックエンドPodのセットに対して負荷分散も行います。つまり、リクエストが複数のPodに均等に分散されるようになります。
Serviceはさまざまなタイプを持つことができます。主なServiceタイプには以下のものがあります:
- ClusterIP: クラスタ内部の仮想IPアドレスを使用してServiceを公開します。このタイプは、クラスタ内の他のリソースからのみアクセス可能です。
- NodePort: クラスタのすべてのノードの特定のポート(NodePort)を使用してServiceを公開します。これにより、クラスタの外部からServiceにアクセスできるようになります。
- LoadBalancer: クラウドプロバイダによって提供されるロードバランサを使用してServiceを公開します。このタイプは、クラスタの外部からのトラフィックをバランスするために使用されます。
- ExternalName: CNAMEレコードを使用して、外部のDNS名をServiceとして公開します。このタイプは、外部のサービスにアクセスするために使用されます。
これらのServiceタイプは、異なる用途とユースケースに応じて選択されます。ServiceはKubernetesクラスタ内のネットワーキングとアプリケーションの可用性を向上させるための重要なコンポーネントです。
おわりに
今日は、Docker Desctop for Mac で有効にしたKubernates上でnginxにブラウザからアクセスする方法についてご紹介しました。
何か質問や相談があれば、遠慮なくコメントしてください。また、エンジニア案件についても、いつでも相談にのっていますので、お気軽にお問い合わせください。
それでは、また明日お会いしましょう(^^)
コメント