パブリック インターネットから Tanzu Kubernetes Grid クラスタで実行されている Kubernetes サービスへのアクセスを有効にするには、サービスを内部で公開し、パブリック IP アドレスを付与して、Ingress CIDR の特定の IP アドレス上にそのサービスを公開する DNAT ルールを作成します。
クラスタ サービスへのインターネット アクセスは、Tanzu Kubernetes Grid を有効にしたときに指定した Ingress CIDR ブロックで DNAT 処理されたパブリック IP アドレスを介してロード バランサによって管理されます。VMware Cloud on AWS では、ロード バランサ サービスは NSX Container Plug-in によって実装されます。このプラグインは、Tanzu Kubernetes Grid を有効にした SDDC クラスタごとに自動的に構成されます。詳細については、「NSX Container Plug-in の概要」を参照してください。
次の手順は、パブリック インターネットから Kubernetes サービスへのアクセスを可能にする際に使用可能な、一般的なワークフローの概要を示しています。VMware Cloud Tech Zone の記事Set Up Public Access to Tanzu Kubernetes Clusters in VMware Cloud on AWSでは、このワークフローについて詳細に説明しています。
手順
- https://vmc.vmware.com の VMware Cloud Services にログインします。
- VMware Cloud on AWS API を使用して、サービスを内部で公開します。
以下のように、名前空間とノード ポートを指定し、LoadBalancer タイプのサービスとして展開します。
apiversion: v1
kind: service
metadata:
name: example-svc
namespace: ns1
labels:
app: hardtop-example
spec:
ports:
port:80
targetPort: 8080
type: LoadBalancer
selector:
app: example-app
type: LoadBalancer
の Kubernetes サービスを展開すると、そのサービスが公開され、クラスタ内の指定されたポート(この例では
port: 80
)にアクセスできるようになり、サービスのノード ポートが 30,000 を超えるランダムなポートにマッピングされます。
- 外部 IP アドレス上の仮想マシンと、マッピングされたノード ポート(この例では 31552 を使用)へのアクセスを許可する VMware Cloud on AWS コンピューティング ゲートウェイのファイアウォール ルールを作成します。
次のような
kubectl コマンドを使用することで、ファイアウォール ルールに必要なサービス プロパティを返します。
kubectl get service example-svc -n ns1
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S)
example-svc LoadBalancer 10.96.249.36 10.130.1.9 80:31552/TCP
『
VMware Cloud on AWS Networking and Security』ガイドの
管理ゲートウェイファイアウォール ルールの追加または変更の手順に従って、次のようなパラメータを持つルールを作成します。
オプション |
説明 |
送信元 |
任意 |
宛先 |
サービスの外部 IP アドレス(この例では 10.130.1.9) |
サービス |
[HTTP] |
操作 |
[許可] |
- サービスを提供する仮想マシン用のパブリック IP アドレスを要求します。
- このパブリック IP アドレスの DNAT ルールを作成します。
『
VMware Cloud on AWS Networking and Security』ガイドの
NAT ルールの作成または変更の手順に従って、パブリック IP アドレスと内部 IP アドレスを照合する DNAT ルールを作成します。ルールで
[内部アドレスと一致] が指定されている場合、インターネット インターフェイスで
[パブリック IP] アドレスへのアクセスを許可するファイアウォール ルールも作成する必要があります。