作業概要
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証明書を適用し、証明書の自動更新を行う一例
カスタムドメイン用の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