0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

AWS ContainersAdvent Calendar 2021

Day 3

ROSAで独自コンテナをインターネットに公開してみた

Posted at

はじめに

以前の記事で、ROSA(Red Hat OpenShift Service on AWS) クラスターのデプロイ方法と、Web コンソールのアクセス経路を調査しました。

ROSA(Red Hat OpenShift Service on AWS) を動かしてみた
https://qiita.com/sugimount-a/items/73d3ad7864e69cba2cc7

ROSAのコンソールのアクセス経路と提供元Podを調査してみた
https://qiita.com/sugimount-a/items/0720c41cba6a1c0b2954

今回は、自分たちで作成した Deployment を外部公開するときの手順を紹介します。「ROSAのコンソールのアクセス経路と提供元Podを調査してみた」で調査した通信経路を理解すると、自分たちの Deployment を公開するときの通信経路の理解が深まります。もしお時間があれば、ざっと目を通すと良いと思います。

ROSA での公開方法は大きく分けて 2パターンがあると思います。

  • OpenShift に備わっている Route で公開
  • Kubernetes の機能を使い、Service LoadBalancer などで公開

どちらでも問題はないと思いますが、今回は Route で公開をしてみます。

ネットワーク接続図

今回紹介する Route で公開する手順で実現できる、ネットワーク接続図を載せます。

  • 名前解決は Route 53 で行う
  • Internet に接するコンポーネントは、CLB
  • CLB が、Router Pod にリクエストを投げる
  • Router Pod が これから設定する Route 情報に従い、Nginx にリクエストを投げる

image-20211230002442318.png

Route で公開

独自の Deployment として、Nginx コンテナを使っていきます。また、この Deployment に紐づける形で Service Cluster IP を作成します。

マニフェストファイルは次の通りです。

apiVersion: apps/v1 # for versions before 1.9.0 use apps/v1beta2
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  selector:
    matchLabels:
      app: nginx
  replicas: 2 # tells deployment to run 2 pods matching the template
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.14.2
        ports:
        - containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
  name: nginx-service
spec:
  selector:
    app: nginx
  ports:
  - protocol: TCP
    port: 80
    targetPort: 80

ファイルに保存したうえで、apply でデプロイします。

kubectl apply -f ~/k8s-manifests/nginx.yaml

Pod 2個 が Worker Node で稼働しています。

$ kubectl get pods -o wide
NAME                                READY   STATUS    RESTARTS   AGE   IP             NODE
                NOMINATED NODE   READINESS GATES
nginx-deployment-66b6c48dd5-4d7mb   1/1     Running   0          20s   10.129.2.14    ip-10-0-201-136.ap-northeast-1.compute.internal   <none>           <none>
nginx-deployment-66b6c48dd5-gs9v2   1/1     Running   0          20s   10.128.2.211   ip-10-0-164-3.ap-northeast-1.compute.internal     <none>           <none>

Service nginx-service が Cluster IP として稼働しています。

$ kubectl get svc
NAME            TYPE           CLUSTER-IP       EXTERNAL-IP                            PORT(S)   AGE
kubernetes      ClusterIP      172.30.0.1       <none>                                 443/TCP   8h
nginx-service   ClusterIP      172.30.179.253   <none>                                 80/TCP    2m17s
openshift       ExternalName   <none>           kubernetes.default.svc.cluster.local   <none>    8h

Cluster IP を使ってアクセスが出来るか確認をするために、kubectl debug で、動作確認用のコンテナを起動します。curl コマンドなどが既にインストールされている、自分が作成したコンテナを利用します。

kubectl debug nginx-deployment-66b6c48dd5-4d7mb -it --image=sugimount/toolbox:0.0.4 --share-processes --copy-to=myapp-debug

nginx-service に ClusterIP 経由でアクセス可能なことがわかります。

# curl nginx-service
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
    body {
        width: 35em;
        margin: 0 auto;
        font-family: Tahoma, Verdana, Arial, sans-serif;
    }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>

<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>

<p><em>Thank you for using nginx.</em></p>
</body>
</html>

コンテナから Exit します

exit

作成した確認用 Pod を削除しておきます

kubectl delete pod myapp-debug

oc expose で Route を作成します。これによって、Internet に公開されます。

oc expose service nginx-service

実行例

$ oc expose service nginx-service
route.route.openshift.io/nginx-service exposed

作成された Route の確認をします。

$ oc get route
NAME            HOST/PORT                                                        PATH   SERVICES        PORT   TERMINATION   WILDCARD
nginx-service   nginx-service-default.apps.my-rosa02.pkyx.p1.openshiftapps.com          nginx-service   80                   None

コンソール上でも確認できます。

image-20211230000345790.png

場所の URL が、実際にインターネットから接続可能な URL となります。

image-20211230000639354.png

Nginx 画面が正常に表示されます。

image-20211230000649475.png

まとめ

ROSA に付属されている Router を使って、Internet に公開する方法を紹介しました。今回は簡単に公開しただけですが、実際のサービスでは任意のドメイン名で公開したいですし、HTTPS を使ったアクセスも行いたいです。このあたりは時間ができたらまた確認したいと思います。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?