カスタム Ingress ゲートウェイを Cert-Manager を使用してデプロイする
カスタム Ingress ゲートウェイを cert-manager を使用して手動でデプロイする方法について説明します。
この投稿では、cert-manager に基づいて証明書の自動プロビジョニングを使用した、カスタム Ingress ゲートウェイ を手動で作成する手順を示します。
カスタム Ingress ゲートウェイを作成すると、異なる ロードバランサ
を使用してトラフィックを分離できます。
始める前に
- インストールガイド の手順に従って Istio をセットアップします。
- \
cert-manager
を helm チャートでセットアップします。 - この例では
demo.mydemo.com
を使用します。これらは DNS で解決できる必要があります。
カスタム Ingress ゲートウェイの構成
次のコマンドを使用して、cert-manager が Helm でインストールされているかどうかを確認します。
$ helm ls
出力は次の例のようになり、cert-manager の
STATUS
がDEPLOYED
になっている必要があります。NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE istio 1 Thu Oct 11 13:34:24 2018 DEPLOYED istio-1.0.X 1.0.X istio-system cert 1 Wed Oct 24 14:08:36 2018 DEPLOYED cert-manager-v0.6.0-dev.2 v0.6.0-dev.2 istio-system
クラスタの発行者を作成するには、次の構成を適用します。
apiVersion: certmanager.k8s.io/v1alpha1 kind: ClusterIssuer metadata: name: letsencrypt-demo namespace: kube-system spec: acme: # The ACME server URL server: https://acme-v02.api.letsencrypt.org/directory # Email address used for ACME registration email: <REDACTED> # Name of a secret used to store the ACME account private key privateKeySecretRef: name: letsencrypt-demo dns01: # Here we define a list of DNS-01 providers that can solve DNS challenges providers: - name: your-dns route53: accessKeyID: <REDACTED> region: eu-central-1 secretAccessKeySecretRef: name: prod-route53-credentials-secret key: secret-access-key
route53
プロバイダ を使用する場合、DNS ACME Validation を実行するためのシークレットを提供する必要があります。シークレットを作成するには、次の構成ファイルを適用します。apiVersion: v1 kind: Secret metadata: name: prod-route53-credentials-secret type: Opaque data: secret-access-key: <REDACTED BASE64>
独自証明書を作成します。
apiVersion: certmanager.k8s.io/v1alpha1 kind: Certificate metadata: name: demo-certificate namespace: istio-system spec: acme: config: - dns01: provider: your-dns domains: - '*.mydemo.com' commonName: '*.mydemo.com' dnsNames: - '*.mydemo.com' issuerRef: kind: ClusterIssuer name: letsencrypt-demo secretName: istio-customingressgateway-certs
secretName
の値をメモします。以降の手順で必要です。自動的にスケールするには、次の構成を使用して新しい水平ポッドオートスケーラーを宣言します。
apiVersion: autoscaling/v1 kind: HorizontalPodAutoscaler metadata: name: my-ingressgateway namespace: istio-system spec: maxReplicas: 5 minReplicas: 1 scaleTargetRef: apiVersion: apps/v1beta1 kind: Deployment name: my-ingressgateway targetCPUUtilizationPercentage: 80 status: currentCPUUtilizationPercentage: 0 currentReplicas: 1 desiredReplicas: 1
yaml 定義 に記載のプロビジョニングを使用してデプロイメントを適用します。
サービスを作成します。
apiVersion: v1 kind: Service metadata: name: my-ingressgateway annotations: service.beta.kubernetes.io/aws-load-balancer-type: nlb labels: app: my-ingressgateway istio: my-ingressgateway spec: type: LoadBalancer selector: app: my-ingressgateway istio: my-ingressgateway ports: - name: http2 nodePort: 32380 port: 80 targetPort: 80 - name: https nodePort: 32390 port: 443 - name: tcp nodePort: 32400 port: 31400
Istio カスタムゲートウェイ構成オブジェクトを作成します。
apiVersion: networking.istio.io/v1alpha3 kind: Gateway metadata: annotations: name: istio-custom-gateway namespace: default spec: selector: istio: my-ingressgateway servers: - hosts: - '*.mydemo.com' port: name: http number: 80 protocol: HTTP tls: httpsRedirect: true - hosts: - '*.mydemo.com' port: name: https number: 443 protocol: HTTPS tls: mode: SIMPLE privateKey: /etc/istio/ingressgateway-certs/tls.key serverCertificate: /etc/istio/ingressgateway-certs/tls.crt
istio-custom-gateway
をVirtualService
にリンクします。apiVersion: networking.istio.io/v1alpha3 kind: VirtualService metadata: name: my-virtualservice spec: hosts: - "demo.mydemo.com" gateways: - istio-custom-gateway http: - route: - destination: host: my-demoapp
サーバーによって正しい証明書が返され、正常に検証されています(SSL 証明書検証 OK が印刷されます)。
$ curl -v `https://demo.mydemo.com` Server certificate: SSL certificate verify ok.
おめでとうございます!カスタム istio-custom-gateway
ゲートウェイ 構成オブジェクトを今すぐ使用できます。