1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

[IBMCloud] もう期限切れで焦らない!IKSのTLS証明書を自動更新する仕組みを作る Part5

Last updated at Posted at 2025-05-20

作業概要

Part4:「IKSからパブリック証明書の参照と自動更新」にてカスタムドメイン証明書の発行ができたので、この証明書を利用しPublic IngressALBでSecretManagerの作成した証明書をインポートし、TLS終端とアプリケーションへのアクセスが正常に実施可能か確認する

参考ページ:セットアップ・ステップ

インターネットのクライアントからPODまでのアクセスルートは下記の通り

[Client]
   │  HTTP/HTTPS (443)
   ▼
[Load Balancer / Ingress Controller]
   │  受信したリクエストをIngressルールに従ってルーティング
   ▼
[Ingress Resource]
   │    host: www.acspaas.site
   │    backend: service-iks-nginx:30081
   ▼
[Service: service-iks-nginx]
   │  Serviceポート:30081  →  TargetPort:80
   ▼
[Pod (コンテナ)]
   │  コンテナがリッスンしているポート:80
★アプリケーション表示

全体の流れ

ボリュームがあるので、全5回で記事を記載します。
本記事では「4.カスタムドメインパブリック証明書の発行と自動更新」の内容を記載

前回
1.自動証明書管理環境(ACME)のセットアップと認証局の構成
2.DNS Providerの設定と自動更新カスタムドメイン証明書(パブリック)の発行
3.IKSとSecret Managerの連携設定と自動更新の確認
4.IKSからパブリック証明書の参照と自動更新

本記事はこちら
5.作成後公開:[IngressALBから証明書の利用とアプリケーションへのHTTPS動作確認]

全体図
IKSでSecret Managerを利用して、IngressALBにPublic証明書を適用し、証明書の自動更新を行う一例
image.png

カスタムドメイン用のIngress Secretの登録

参考ページ:カスタム・サブドメインの TLS シークレットのセットアップ

前回、SecretManagerからIKSに取り込んだ証明書を調べる

% ibmcloud ks ingress secret ls --cluster cv4ef49t0jeirigoaasg
OK
名前                                                名前空間         CRN                                                                                                                                                                有効期限                   ドメイン                                                                              状況      タイプ
acs-sectest-d13c20a300620486546182a0effece00-0000   default          crn:v1:bluemix:public:secrets-manager:jp-tok:a/db415c559c0e468cb9414edb82aee6fe:5074d80d-949c-468e-9991-7cb884063380:secret:ae2673ed-958c-0324-b6db-dd75277acd12   2025-06-04T03:13:29+0000   acs-sectest-d13c20a300620486546182a0effece00-0000.jp-tok.containers.appdomain.cloud   created   TLS
acs-sectest-d13c20a300620486546182a0effece00-0000   ibm-cert-store   crn:v1:bluemix:public:secrets-manager:jp-tok:a/db415c559c0e468cb9414edb82aee6fe:5074d80d-949c-468e-9991-7cb884063380:secret:ae2673ed-958c-0324-b6db-dd75277acd12   2025-06-04T03:13:29+0000   acs-sectest-d13c20a300620486546182a0effece00-0000.jp-tok.containers.appdomain.cloud   created   TLS
acs-sectest-d13c20a300620486546182a0effece00-0000   kube-system      crn:v1:bluemix:public:secrets-manager:jp-tok:a/db415c559c0e468cb9414edb82aee6fe:5074d80d-949c-468e-9991-7cb884063380:secret:ae2673ed-958c-0324-b6db-dd75277acd12   2025-06-04T03:13:29+0000   acs-sectest-d13c20a300620486546182a0effece00-0000.jp-tok.containers.appdomain.cloud   created   TLS
testcert-namespace-after                            test             crn:v1:bluemix:public:secrets-manager:jp-tok:a/db415c559c0e468cb9414edb82aee6fe:5074d80d-949c-468e-9991-7cb884063380:secret:ad685e86-e7dd-6286-31b0-597b0dd77309   2025-06-04T15:54:31+0000   acspaas.site                                                                          created   TLS
testcert-namespace-before                           test             crn:v1:bluemix:public:secrets-manager:jp-tok:a/db415c559c0e468cb9414edb82aee6fe:5074d80d-949c-468e-9991-7cb884063380:secret:ad685e86-e7dd-6286-31b0-597b0dd77309   2025-06-04T15:54:31+0000   acspaas.site                                                                          created   TLS
testcert                                            test             crn:v1:bluemix:public:secrets-manager:jp-tok:a/db415c559c0e468cb9414edb82aee6fe:5074d80d-949c-468e-9991-7cb884063380:secret:ae2673ed-958c-0324-b6db-dd75277acd12   2025-06-04T03:13:29+0000   acs-sectest.jp-tok.containers.appdomain.cloud                                         created   TLS

新規でシークレットを作る場合は、下記の通り実施できる

% ibmcloud ks ingress secret create --name ingress-alb-tls --cluster cv4ef49t0jeirigoaasg --cert-crn crn:v1:bluemix:public:secrets-manager:jp-tok:a/db415c559c0e468cb9414edb82aee6fe:5074d80d-949c-468e-9991-7cb884063380:secret:ad685e86-e7dd-6286-31b0-597b0dd77309 --namespace default
OK

今回は、新規で「www.acspaas.site」の証明書をSecretManagerからIKS Secretにインポートする

% ibmcloud ks ingress secret create --cluster cv4ef49t0jeirigoaasg --cert-crn crn:v1:bluemix:public:secrets-manager:jp-tok:a/db415c559c0e468cb9414edb82aee6fe:5074d80d-949c-468e-9991-7cb884063380:secret:9c7badcb-e482-d25c-93fe-943b73e4d520 --name www.acspaas.site --namespace default
OK

% ibmcloud ks ingress secret ls --cluster cv4ef49t0jeirigoaasg
OK
名前                                                名前空間         CRN                                                                                                                                                                有効期限                   ドメイン                                                                              状況      タイプ
acs-sectest-d13c20a300620486546182a0effece00-0000   default          crn:v1:bluemix:public:secrets-manager:jp-tok:a/db415c559c0e468cb9414edb82aee6fe:5074d80d-949c-468e-9991-7cb884063380:secret:ae2673ed-958c-0324-b6db-dd75277acd12   2025-06-04T03:13:29+0000   acs-sectest-d13c20a300620486546182a0effece00-0000.jp-tok.containers.appdomain.cloud   created   TLS
acs-sectest-d13c20a300620486546182a0effece00-0000   ibm-cert-store   crn:v1:bluemix:public:secrets-manager:jp-tok:a/db415c559c0e468cb9414edb82aee6fe:5074d80d-949c-468e-9991-7cb884063380:secret:ae2673ed-958c-0324-b6db-dd75277acd12   2025-06-04T03:13:29+0000   acs-sectest-d13c20a300620486546182a0effece00-0000.jp-tok.containers.appdomain.cloud   created   TLS
acs-sectest-d13c20a300620486546182a0effece00-0000   kube-system      crn:v1:bluemix:public:secrets-manager:jp-tok:a/db415c559c0e468cb9414edb82aee6fe:5074d80d-949c-468e-9991-7cb884063380:secret:ae2673ed-958c-0324-b6db-dd75277acd12   2025-06-04T03:13:29+0000   acs-sectest-d13c20a300620486546182a0effece00-0000.jp-tok.containers.appdomain.cloud   created   TLS
testcert-namespace-after                            test             crn:v1:bluemix:public:secrets-manager:jp-tok:a/db415c559c0e468cb9414edb82aee6fe:5074d80d-949c-468e-9991-7cb884063380:secret:ad685e86-e7dd-6286-31b0-597b0dd77309   2025-06-04T15:54:31+0000   acspaas.site                                                                          created   TLS
testcert-namespace-before                           test             crn:v1:bluemix:public:secrets-manager:jp-tok:a/db415c559c0e468cb9414edb82aee6fe:5074d80d-949c-468e-9991-7cb884063380:secret:ad685e86-e7dd-6286-31b0-597b0dd77309   2025-06-04T15:54:31+0000   acspaas.site                                                                          created   TLS
testcert                                            test             crn:v1:bluemix:public:secrets-manager:jp-tok:a/db415c559c0e468cb9414edb82aee6fe:5074d80d-949c-468e-9991-7cb884063380:secret:ae2673ed-958c-0324-b6db-dd75277acd12   2025-06-04T03:13:29+0000   acs-sectest.jp-tok.containers.appdomain.cloud                                         created   TLS
www.acspaas.site                                    default          crn:v1:bluemix:public:secrets-manager:jp-tok:a/db415c559c0e468cb9414edb82aee6fe:5074d80d-949c-468e-9991-7cb884063380:secret:9c7badcb-e482-d25c-93fe-943b73e4d520   2025-06-09T01:19:16+0000   www.acspaas.site                                                                      created   TLS

Cluster IPサービスの作成

構成図で言うと「Service: service-iks-nginx」の部分を作る

[Ingress Resource]
   │    host: www.acspaas.site
   │    backend: service-iks-nginx:30081
   ▼
[Service: service-iks-nginx]
   │  Serviceポート:30081  →  TargetPort:80
   ▼
[Pod (コンテナ)]
   │  コンテナがリッスンしているポート:80
★アプリケーション表示

IngressALBとワーカーノード(POD)間のネットワークを作成する

% kubectl expose deploy iks-nginx --name service-iks-nginx --port 30081 --target-port=80 -n default
service/service-iks-nginx exposed

yaml

% ku get svc service-iks-nginx
NAME                TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)     AGE
service-iks-nginx   ClusterIP   172.21.152.141   <none>        30081/TCP   7m6s

% ku get svc service-iks-nginx -o yaml
apiVersion: v1
kind: Service
metadata:
  creationTimestamp: "2025-03-11T03:17:54Z"
  name: service-iks-nginx
  namespace: default
  resourceVersion: "696506"
  uid: bcc71434-2dc6-4f59-9a18-cad163e2f208
spec:
  clusterIP: 172.21.152.141
  clusterIPs:
  - 172.21.152.141
  internalTrafficPolicy: Cluster
  ipFamilies:
  - IPv4
  ipFamilyPolicy: SingleStack
  ports:
  - port: 30081
    protocol: TCP
    targetPort: 80
  selector:
    app: nginx
  sessionAffinity: None
  type: ClusterIP
status:
  loadBalancer: {}

Ingressの作成

構成図で言うと「Ingress Resource」の部分を作る

[Ingress Resource]
   │    host: www.acspaas.site
   │    backend: service-iks-nginx:30081
   ▼
[Service: service-iks-nginx]
   │  Serviceポート:30081  →  TargetPort:80
   ▼
[Pod (コンテナ)]
   │  コンテナがリッスンしているポート:80
★アプリケーション表示

ドメイン名、Serviceおよび作成したシークレットの情報を書き込み作成する

% ku apply -f ingress-acspaas.yaml
ingress.networking.k8s.io/my-ingress-resource created

% cat ingress-acspaas.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: my-ingress-resource
spec:
  ingressClassName: public-iks-k8s-nginx
  tls:
  - hosts:
    - www.acspaas.site
    secretName: www.acspaas.site
  rules:
  - host: www.acspaas.site
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: service-iks-nginx
            port:
              number: 30081

% ku describe ingress my-ingress-resource
Name:             my-ingress-resource
Labels:           <none>
Namespace:        default
Address:          3bc64147-jp-tok.lb.appdomain.cloud
Ingress Class:    public-iks-k8s-nginx
Default backend:  <default>
TLS:
  www.acspaas.site terminates www.acspaas.site
Rules:
  Host              Path  Backends
  ----              ----  --------
  www.acspaas.site
                    /   service-iks-nginx:30081 (172.17.90.16:80,172.17.122.35:80)
Annotations:        <none>
Events:
  Type    Reason  Age               From                      Message
  ----    ------  ----              ----                      -------
  Normal  Sync    1s (x2 over 30s)  nginx-ingress-controller  Scheduled for sync
  Normal  Sync    1s (x2 over 30s)  nginx-ingress-controller  Scheduled for sync

作成したシークレットを正常にIngressが参照し、サービスでネットワークに関連付けられることで
インターネット上からIngressを経由し、WorkerNodeのPODにアクセス可能な状態となる

% curl https://www.acspaas.site
Hostname: iks-nginx-76cf8d4869-7kmwj Current Time: 2025-03-11 03:33:05

ingressALBが二台のPODでロードバランスしている
podA:iks-nginx-76cf8d4869-7kmwj
podB:iks-nginx-76cf8d4869-59nww

% while true; do curl --max-time 1 -s https://www.acspaas.site || echo "Request timed out or failed."; sleep 1; done
Hostname: iks-nginx-76cf8d4869-7kmwj Current Time: 2025-03-11 03:34:02
Hostname: iks-nginx-76cf8d4869-59nww Current Time: 2025-03-11 03:34:03
Hostname: iks-nginx-76cf8d4869-7kmwj Current Time: 2025-03-11 03:34:05
Hostname: iks-nginx-76cf8d4869-59nww Current Time: 2025-03-11 03:34:05
Hostname: iks-nginx-76cf8d4869-7kmwj Current Time: 2025-03-11 03:34:07
Hostname: iks-nginx-76cf8d4869-59nww Current Time: 2025-03-11 03:34:08
Hostname: iks-nginx-76cf8d4869-7kmwj Current Time: 2025-03-11 03:34:09
Hostname: iks-nginx-76cf8d4869-59nww Current Time: 2025-03-11 03:34:10
Hostname: iks-nginx-76cf8d4869-59nww Current Time: 2025-03-11 03:34:11
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?