SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

KubernetesによるスケーラブルなWebアプリ環境の構築

KubernetesクラスタにServiceとIngressを追加し、Webアプリケーションを外部に公開

KubernetesによるスケーラブルなWebアプリ環境の構築 第2回


  • このエントリーをはてなブックマークに追加

 本連載では、オープンソースのオーケストレーションシステムである「Kubernetes」を用いて、スケーラブルで運用しやすいWebアプリケーションを構築する方法を紹介します。前回はGoogle Container Engine上にKubernetesクラスタを作成し、それにDeploymentをデプロイしました。今回はWebアプリケーションを外部に公開するために、クラスタにServiceとIngressを追加します。

  • このエントリーをはてなブックマークに追加

はじめに

 Podを外部に公開するだけであれば、Serviceだけでも可能です。しかし、IngressとServiceを組み合わせたほうがURLごとに接続するServiceを変更できるなど多機能であるため、本記事ではService+Ingressの構成について解説を行います。

 以下は本記事の構成図です。

本記事の構成図
本記事の構成図

 第1回で追加したPodに対してServiceを追加し、そのIngressとPodがSeriviceを通じて通信ができるようにします。Ingressは外部に公開されており、インターネットを通じて外部と通信できます。

対象読者

  • Linuxの基本的なコマンドが使える方
  • Dockerの使用経験がある方
  • Kubernetesを使ったことがない技術者

検証環境

Kubernetes側の環境

  • Google Container Engine 1.7.5
  • Kubernetes 1.7.5

クライアントの環境

  • macOS Sierra 10.12.6
  • kubectl 1.7.3

PodとIngressを接続するためのService(NodePort)の作成

 それでは、Serviceを作成していきましょう。Serviceを追加することで、Serviceで指定したPodがクラスタ内のPodやIngressと通信ができるようになります。

 Serviceのkind(種類)はNodePortです。NodePortは各NodeのIPでポートを公開します。これにより、クラスタの外からServiceにアクセスできるようになります。

 今回作成するServiceはselectorで、第1回目で作成したPodのlabelsを指定します。エディタを開き、リスト1をコピー&ペーストして「service-my-api.yaml」というファイル名で保存してください。

リスト1 service-my-api.yaml
apiVersion: v1
kind: Service
metadata:
  name: service-my-api
spec:
  type: NodePort # typeにNodePortを指定する
  ports:
  - protocol: TCP
    port: 80
    targetPort: 80
    name: http
  selector:
    app: my-api # Deploymentと同じappを指定する
    version: v1 # Deploymentと同じversionを指定する

 それでは、kubectl createコマンドを使ってServiceを作成しましょう。

$ kubectl create -f service-my-api.yaml
service "service-my-api" created

 createコマンドが正常終了したら、次はServiceが作られているかどうかをkubectl getで確認します。

$ kubectl get svc
NAME             CLUSTER-IP      EXTERNAL-IP   PORT(S)        AGE
kubernetes       xx.xx.xxx.x     <none>        443/TCP        5h
service-my-api   xx.xx.xxx.xxx   <nodes>       80:31708/TCP   36s

 Serviceが正常に作られていたら、「service-my-api」という名前のServiceが確認できるはずです。

 次に、kubectl describeコマンドでSelectorが設定されているかを確認しましょう。describeコマンドは指定したリソースの詳細を確認することができるコマンドです。

$ kubectl describe svc/service-my-api
Name:            service-my-api
Namespace:        default
Labels:            <none>
Annotations:        <none>
Selector:        app=my-api,version=v1
Type:            NodePort
IP:            10.51.251.245
Port:            http    80/TCP
NodePort:        http    31708/TCP
Endpoints:        <none>
Session Affinity:    None
Events:            <none>

 YAMLで定義した内容でServiceが作成されたことが確認ができたでしょうか。Selectorの項目にSelector: app=my-api,version=v1と表示されているはずです。

会員登録無料すると、続きをお読みいただけます

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

次のページ
Ingressの作成

この記事は参考になりましたか?

  • このエントリーをはてなブックマークに追加
KubernetesによるスケーラブルなWebアプリ環境の構築連載記事一覧

もっと読む

この記事の著者

WINGSプロジェクト 吉海 将太(ヨシカイ ショウタ)

 株式会社カブクのサーバーサイドエンジニアです。APIの開発(Python,GO,AppEngine)とKubernetesによるインフラ環境の構築を担当しています。好きな獣はチベットスナギツネです。 Twitter: @yoshikai_ FacebookWINGSプロジェクトについて> 有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。2018年11月時点での登録メンバは55名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂きたい。著書記事多数。 RSS Twitter: @yyamada(公式)、@yyamada/wings(メンバーリスト)

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

山田 祥寛(ヤマダ ヨシヒロ)

静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるReact実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/10523 2017/12/18 15:46

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング