Kubernetes Ingress のリソースは、クラスタ外からクラスタ内の 1 つ以上のサービスに HTTP または HTTPS ルーティングを提供します。TKG クラスタは、Contour などのサードパーティ製コントローラを介した入力をサポートします。
このチュートリアルは、TKG クラスタ内のサービスに外部トラフィックをルーティングするための、Contour 入力方向コントローラをデプロイする方法を示しています。Contour は、VMware が参加しているオープンソース プロジェクトです。
前提条件
手順
- ClusterRoleBinding を作成し、サービス アカウントでクラスタのすべてのリソースを管理できるようにします。
kubectl create clusterrolebinding default-tkg-admin-privileged-binding --clusterrole=psp:vmware-system-privileged --group=system:authenticated
注: セキュリティを強化する必要がある場合は、projectcontour
名前空間で RoleBinding を使用します。 TKG サービス クラスタへのデフォルトのポッド セキュリティ ポリシーの適用を参照してください。 -
projectcontour
という名前の名前空間を作成します。これが、Contour 入力方向コントローラのデプロイで使用するデフォルトの名前空間になります。kubectl create ns projectcontour
- Contour 入力方向コントローラの最新の YAML である Contour Ingress Deployment をダウンロードします。
- テキスト エディタで contour.yaml ファイルを開きます。
- 次の 2 つの行の前に
#
記号を付加して、各行をコメントアウトします。行 1632:# service.beta.kubernetes.io/aws-load-balancer-backend-protocol: tcp
行 1634:# externalTrafficPolicy: Local
-
contour.yaml
ファイルを適用して Contour をデプロイします。kubectl apply -f contour.yaml
- Contour 入力方向コントローラと Envoy ロード バランサ サービスがデプロイされていることを確認します。
kubectl get services -n projectcontour
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE contour ClusterIP 198.63.146.166 <none> 8001/TCP 120m envoy LoadBalancer 198.48.52.47 192.168.123.5 80:30501/TCP,443:30173/TCP 120m
- Contour および Envoy ポッドが実行中であることを確認します。
kubectl get pods -n projectcontour
NAME READY STATUS RESTARTS AGE contour-7966d6cdbf-skqfl 1/1 Running 1 21h contour-7966d6cdbf-vc8c7 1/1 Running 1 21h contour-certgen-77m2n 0/1 Completed 0 21h envoy-fsltp 1/1 Running 0 20h
- 外部 IP アドレスを使用してロード バランサを ping します。
ping 192.168.123.5
PING 192.168.123.5 (192.168.123.5) 56(84) bytes of data. 64 bytes from 192.168.123.5: icmp_seq=1 ttl=62 time=3.50 ms
- ingress-nihao.yaml という名前の入力方向リソースを作成します。
YAML を作成します。
apiVersion: networking.k8s.io/v1beta1 kind: Ingress metadata: name: ingress-nihao spec: rules: - http: paths: - path: /nihao backend: serviceName: nihao servicePort: 80
YAML を適用します。kubectl apply -f ingress-nihao.yaml
入力方向リソースが作成されたことを確認します。kubectl get ingress
入力方向オブジェクトでは、Envoy LoadBalancer の外部 IP アドレス(この例では192.168.123.5
)が使用されます。NAME CLASS HOSTS ADDRESS PORTS AGE ingress-nihao <none> * 192.168.123.5 80 17s
- バックエンド アプリケーションを使用してテスト サービスをデプロイします。
ingress-nihao-test.yaml という名前の YAML ファイルを作成します。
kind: Service apiVersion: v1 metadata: name: nihao spec: selector: app: nihao tier: backend ports: - protocol: TCP port: 80 targetPort: http --- apiVersion: apps/v1 kind: Deployment metadata: name: nihao spec: replicas: 3 selector: matchLabels: app: nihao tier: backend track: stable template: metadata: labels: app: nihao tier: backend track: stable spec: containers: - name: nihao image: "gcr.io/google-samples/hello-go-gke:1.0" ports: - name: http containerPort: 80
YAML を適用します。kubectl apply -f ingress-nihao-test.yaml
nihao
サービスが作成されたことを確認します。kubectl get services
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE nihao ClusterIP 10.14.21.22 <none> 80/TCP 15s
バックエンド デプロイが作成されたことを確認します。kubectl get deployments
NAME READY UP-TO-DATE AVAILABLE AGE nihao 3/3 3 3 2m25s
バックエンド ポッドが存在することを確認します。kubectl get pods
NAME READY STATUS RESTARTS AGE nihao-8646584495-9nm8x 1/1 Running 0 106s nihao-8646584495-vscm5 1/1 Running 0 106s nihao-8646584495-zcsdq 1/1 Running 0 106s
- Contour 入力方向コントローラで使用されるロード バランサのパブリック IP アドレスを取得します。
kubectl get ingress
NAME CLASS HOSTS ADDRESS PORTS AGE ingress-nihao <none> * 10.19.14.76 80 13m
- ブラウザを使用してパブリック IP アドレスに移動し、Ingress のパスを含めます。
http://10.19.14.76/nihao
「hello」というメッセージが返されます。{"message":"Hello"}