NGINX Ingressは、Container Service for Kubernetes (ACK) クラスターのネットワークトラフィック管理ソリューションであり、Ingress APIオブジェクトを介して外部トラフィックをKubernetesクラスター内のサービスにルーティングします。 NGINX Ingressコントローラーはクラスター内にデプロイされ、高いパフォーマンスとカスタマイズを提供します。 ACK Edgeクラスターが提供するNGINX Ingressコントローラーは、オープンソースバージョンとAlibaba Cloudサービスの機能を統合し、シンプルなユーザーエクスペリエンスを提供します。 このトピックでは、ACK EdgeクラスターでNGINX Ingressを使用する方法について説明します。
手順
クラウドノードプールとエッジノードプールの両方にNGINX Ingressコントローラーをデプロイします。 詳細については、「NGINX Ingressコントローラーのインストール」をご参照ください。 デプロイ後にNGINX Ingressコントローラーのステータスとサービスの公開を確認できます。
次のコマンドを実行して、クラウドノードプール内のNGINX Ingressコントローラポッドのステータスを表示します。
kubectl get po -n ingress-cloud -o wide
期待される出力:
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES ack-ingress-nginx-v1-cloud-controller-7d7b555f8b-5kgqb 1/1 Running 0 20s 10.10.0.1 cloud-node-1 <none> <none> ack-ingress-nginx-v1-cloud-controller-7d7b555f8b-725cl 1/1 Running 0 20s 10.10.0.2 cloud-node-2 <none> <none>
次のコマンドを実行して、クラウドノードプール内のNGINX Ingress controller Serviceのステータスを表示します。
kubectl get svc -n ingress-cloud
期待される出力:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE ack-ingress-nginx-v1-cloud-controller LoadBalancer 172.12.0.1 xxx.xxx.xxx.xxx 80:30080/TCP,443:30443/TCP 30S
次のコマンドを実行して、エッジノードプール内のNGINX Ingressコントローラポッドのステータスを表示します。
kubectl get po -n ingress-edge -o wide
期待される出力:
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES ack-ingress-nginx-v1-edge-controller-7d57b84c88-4wsm4 1/1 Running 0 17s 10.10.0.1 edge-node-1 <none> <none> ack-ingress-nginx-v1-edge-controller-7d57b84c88-fqvj8 1/1 Running 0 17s 10.10.1.1 edge-node-2 <none> <none>
次のコマンドを実行して、エッジノードプールのNGINX Ingressコントローラーサービスのステータスを表示します。
kubectl get svc -n ingress-edge
期待される出力:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE ack-ingress-nginx-v1-edge-controller NodePort 172.12.0.2 <none> 80:32080/TCP,443:32443/TCP 3m51s
cube.yamlという名前のファイルを作成し、次の内容をファイルにコピーします。
apiVersion: v1 kind: Service metadata: name: cube-svc annotations: openyurt.io/topologyKeys: openyurt.io/nodepool spec: type: ClusterIP selector: app: cube ports: - port: 80 targetPort: 80 --- apiVersion: apps/v1 kind: Deployment metadata: name: cube labels: app: cube spec: replicas: 4 selector: matchLabels: app: cube template: metadata: labels: app: cube spec: containers: - name: cube-web image: registry.cn-hangzhou.aliyuncs.com/acr-toolkit/ack-cube:1.0 ports: - containerPort: 80
次のコマンドを実行して、テストアプリケーションキューブとサービスを作成します。
kubectl apply -f cube.yaml
次のコマンドを実行して、アプリケーションポッドがクラウドノードプールとエッジノードプールの両方にデプロイされているかどうかを確認します。
kubectl get pod -o wide
期待される出力:
NAME READY STATUS RESTARTS AGE IP NODE cube-757558c974-9zfkn 1/1 Running 0 11m 10.10.0.1 cloud-node-1 cube-757558c974-cw72m 1/1 Running 0 11m 10.10.0.2 cloud-node-2 cube-757558c974-fbvlf 1/1 Running 0 11m 10.10.1.1 edge-node-1 cube-757558c974-ngwxt 1/1 Running 0 11m 10.10.1.2 edge-node-2
ingress.yamlという名前のファイルを作成し、次の内容をファイルにコピーして、クラウドIngressコントローラーとエッジIngressコントローラーの両方にingressを作成します。
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: cube-ingress-cloud namespace: default spec: ingressClassName: ack-nginx-cloud # Create an Ingress for the cloud Ingress controller. rules: - host: example.cube.com http: paths: - path: / backend: service: name: cube-svc port: number: 80 pathType: ImplementationSpecific --- apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: cube-ingress-edge namespace: default spec: ingressClassName: ack-nginx-edge # Create an Ingress for the edge Ingress controller. rules: - host: example.cube.com http: paths: - path: / backend: service: name: cube-svc port: number: 80 pathType: ImplementationSpecific
次のコマンドを実行して、Ingressリソースを作成します。
kubectl apply -f ingress.yaml
次のコマンドを実行して、Ingressリソースを照会します。
kubectl get ingress
期待される出力:
NAME CLASS HOSTS ADDRESS PORTS AGE cube-ingress-cloud ack-nginx-cloud example.cube.com 139.224.xxx.xxx 80 24m cube-ingress-edge ack-nginx-edge example.cube.com 172.20.xxx.xxx 80 24m
クラウドノードプールのIngressコントローラーは、LoadBalancerサービスを使用してインターネットに対応するサービスを提供します。 ロードバランサーのIPアドレスは、Ingressのaddressフィールドに自動的に入力されます。 このIPアドレスを使用してサービスにアクセスできます。
エッジノードプールのIngressコントローラーは、NodePortサービスを使用してインターネットに対応するサービスを提供します。 ClusterIPタイプのサービスのIPアドレスは、Ingressのアドレスフィールドに入力されます。 ノードのIPアドレスとノードポートを使用して、サービスにアクセスできます。
関連ドキュメント
ACKエッジクラスターは、ACK Proクラスターに基づいてエッジノードプールの機能を拡張し、エッジノードとデータセンターを接続します。 したがって、ACK EdgeクラスターのNGINX Ingressは次の機能をサポートしています。
API 操作 | 参照 | ACKエッジの違い |
NGINX Ingressを作成するには? | 実際のシナリオに基づいてトラフィックトポロジを設定します。 | |
NGINX Ingressコントローラーのデプロイ方法は? | アプリケーションマーケットプレイスを介したデプロイのみをサポートします。 | |
NGINX Ingressコントローラーを更新する方法は? | ackコンソールのMarketplaceページからACK-ingress-nginxをack-ingress-nginx-v1に更新 | アプリケーションマーケットプレイスを介したアップグレードのみをサポートします。 |
高負荷アプリケーション用にNGINX Ingressコントローラーをデプロイする方法は? | なし。 | |
インターネット接続と内部接続のCLBインスタンスを使用するようにIngressコントローラーを設定する方法は? | クラウドノードプールにデプロイされたIngress Controllerのみをサポートします。 | |
NGINX Ingressを介してカナリアリリースと青緑色のデプロイを実装する方法は? | なし。 | |
Ingressコントローラーを介してネットワークトラフィックをミラーリングする方法は? | なし。 | |
NGINX Ingressコントローラーでトレース分析を使用する方法は? | なし。 | |
NGINX Ingressアクセスログをデプロイして表示する方法は? | コマンドラインの有効化のみをサポートします。 | |
Ingressコントローラーを介してgRPCサービスにアクセスする方法は? | なし。 |