Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

ワークロードをウェブ API として公開する

PFCP の API Identity-Aware Proxy(API IAP)機能を使うことで、ワークロードをウェブ API としてインターネットに公開できます。 公開するウェブ API には自動でアクセス時の認証が設定され、アクセスには Kubernetes ServiceAccount のトークンが必要になります。

API IAP を利用してウェブ API をインターネットに公開する方法を説明します。

Info

ブラウザからアクセスする ウェブアプリ としてワークロードを公開したい場合は ワークロードをウェブアプリとして公開する を参照してください。

Ingressリソースを使用したウェブ API の公開

  1. 公開するワークロードと Service リソースを用意します。ここでは例として、example-svc Service の 80 番ポートへアクセスすることでワークロードへアクセスできる状態になっているとします。

  2. 以下を参考に、Ingress マニフェストを作成します。

    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: example-ingress
    spec:
      rules:
      - # Ingress に割り当てるドメインを指定します。
        # 注意: ウェブアプリでの公開と異なり、`api.iap.pfcomputing.com` のサブドメインを指定します。
        host: example.<組織名>.<クラスタ名>.api.iap.pfcomputing.com
        http:
          paths:
          - path: /
            pathType: Prefix
            backend:
              # 公開対象の Service 名とポートを指定します。
              service:
                name: example-svc
                port:
                  number: 80
    

    サブドメインの制限

    ウェブ API 用 Ingress ではドメインとして *.<組織名>.<クラスタ名>.api.iap.pfcomputing.com のみ使用できます。

    例えば、組織名が foo でクラスタ名が sr1-01 の場合は *.foo.sr1-01.api.iap.pfcomputing.com となります。

  3. 以下を参考に、Ingress へアクセスするための Kubernetes ServiceAccount を作成します。

    apiVersion: v1
    kind: ServiceAccount
    metadata:
      name: example-sa
      # Ingress と同じ Namespace を指定します。
      namespace: org-foo
      labels:
        # アクセスを許可する Ingress リソースの名前を指定します。
        ingress.preferred.jp/allowed-ingress: example-ingress
    

    default ServiceAccount

    Kubernetes が自動作成する default という名前の ServiceAccount は Ingress へのアクセスに利用できません。

  4. kubectl を利用して Kubernetes ServiceAccount のトークンを発行します。Ingress リソースに設定したドメインへ https:// をつけた値を Audience に設定する必要があります。トークンの有効期限は必要に応じて調整してください。

    $ kubectl create token example-sa --duration 12h --audience https://example.<組織名>.<クラスタ名>.api.iap.pfcomputing.com
    eyJ...
    

    トークンの有効期限

    無期限に有効なトークンを発行することはできません。代わりに十分に長い期間を指定してください。

  5. 発行したトークンを Authorization HTTP ヘッダーに指定し、設定したドメインにアクセスします。公開したサービスにアクセスできることを確認します。

    $ curl -v -H "Authorization: Bearer eyJ..." https://example.<組織名>.<クラスタ名>.api.iap.pfcomputing.com
    

トークンの管理

発行済みの Kubernetes ServiceAccount のトークンを無効にするには、Kubernetes ServiceAccount 自体を削除してください。トークンごとに細かく無効化したい場合は Bound トークン の利用を検討してください。

Kubernetes ServiceAccount の ingress.preferred.jp/allowed-ingress ラベルを削除すると、トークンを無効化せずに一時的にアクセスを遮断できます。アクセスを再開する場合は再度ラベルを設定してください。

Ingress にアクセス可能な Kubernetes ServiceAccount の一覧は kubectl コマンドで確認できます。

$ kubectl get serviceaccount --selector ingress.preferred.jp/allowed-ingress
NAME         SECRETS   AGE
example-sa   0         4s

制限事項

  • Service リソースの NodePortLoadBalancer タイプを使用したサービスの公開をサポートしていません
  • 複数の Ingress で同一のドメインを共有している場合はアクセスできません
  • 60 秒間通信のない状態が続くとコネクションが切断されます