ワークロードをウェブアプリとして公開する
PFCP の WebApp Identity-Aware Proxy(WebApp IAP)機能を使うことで、ワークロードをウェブアプリとしてインターネットに公開できます。 公開するウェブアプリには自動でアクセス時の認証が設定され、同一組織に属するユーザのみブラウザからアクセスできます。
WebApp IAP を利用してウェブアプリをインターネットに公開する方法を説明します。
CLI などからアクセスする ウェブ API としてワークロードを公開したい場合は ワークロードをウェブ API として公開する を参照してください。
ウェブアプリを組織全体に公開する
-
公開するワークロードと Service リソースを用意します。ここでは例として、
example-svcService の 80 番ポートへアクセスすることでワークロードへアクセスできる状態になっているとします。 -
以下を参考に、Ingress マニフェストを作成します。
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: example-ingress spec: rules: - # Ingress に割り当てるドメインを指定します。 # 注意: ウェブ API での公開と異なり、`ingress.pfcomputing.com` のサブドメインを指定します。 host: example.<組織名>.<クラスタ名>.ingress.pfcomputing.com http: paths: - path: / pathType: Prefix backend: # 公開対象の Service 名とポートを指定します。 service: name: example-svc port: number: 80 -
ポータルのパブリックエンドポイント にアクセスし、 クラスタ名 と ネームスペース名 を選択します。出力されるパブリックエンドポイント一覧の中に、作成した Ingress のサブドメインが含まれることを確認します。
-
指定したサブドメインにブラウザからアクセスし、ログインした後1、公開したサービスにアクセスできることを確認します。
ウェブアプリを組織の一部ユーザに限定公開する
ウェブアプリの公開範囲を、組織内の特定のユーザもしくはユーザグループに限定できます。
まずは「ウェブアプリを組織全体に公開する」の手順に従って Ingress を作成してください。 その後、公開範囲を制限したい Ingress に対して、以下のようにアノテーションを追加してください。 値には、アクセスを許可するユーザのメールアドレスまたはユーザグループの名前をカンマ区切りで記載してください。
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: example-ingress
annotations:
# 特定のユーザを許可する場合は allowed-users アノテーションを追加する
ingress.preferred.jp/allowed-users: "foo@example.com, bar@example.com, baz@example.com"
...
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: example-ingress
annotations:
# 特定のユーザグループを許可する場合は allowed-groups アノテーションを追加する
ingress.preferred.jp/allowed-groups: "foo-group, bar-group"
...
両方のアノテーションを追加したときは、指定されたユーザおよびユーザグループの両方に対してアクセスが許可されます。
ユーザグループの管理については 組織のユーザを管理する を参照してください。
自身が所属するユーザグループは kubectl auth whoami コマンドでも確認できます。組織 foo のユーザグループ bar に所属している場合、Groups のリストに oidc:org-foo/bar という値が入ります。
公開範囲を制限できているか確認する
アノテーションを付与したあとは、実際に Ingress へアクセスして公開範囲を制限できているか確認してください。
公開範囲を制限すると、Ingress に nginx.ingress.kubernetes.io/auth-url アノテーションが追加されます。
このアノテーションが追加されていない場合は、アノテーションの typo などがないかマニフェストを確認してください。
公開範囲を組織全体へ戻す
Ingress に付与されている以下のすべてのアノテーションを削除してください。
ingress.preferred.jp/allowed-usersingress.preferred.jp/allowed-groupsnginx.ingress.kubernetes.io/auth-url
制限事項
- Service リソースの
NodePort、LoadBalancerタイプを使用したサービスの公開をサポートしていません
-
ブラウザに有効な認証キャッシュが存在する場合、ログイン処理はスキップされます。 ↩