前提
OpenShift v4.2では不可能。自己署名証明書を組み込んだOpenStackはサポートされていない。
OpenShift v4.3を使う必要がある。
※今後v4.2にバックポートされる可能性はあると思う
理由
OpenShift on OpenStack構成をUPIでデプロイさせる場合、CoreOSのブートの際に使用するIgnition ConfigはSwiftに配置される。
CoreOSがブートする際、外部からのCA証明書の追加がサポートされていないため、Swiftから読み込むことができない。
v4.3ならばCA証明書をUserData経由でCoreOSインスタンスに渡し、CoreOSはそのCA証明書を読み込むことができる。結果、SwiftからIgnition Configを読み込むことができる。
事象
前述の通り、SSL証明書エラーにより、SwiftからIgnition Configを読み込むことができない。
具体的には以下のような形。
-
openshift-install create cluster
を実行 - bootstrap-nodeやmaster-nodeが作成される
- 全ノードで
x509: certificate signed by unknown authority
というエラーを出力され、ブートできない状態が続く- 各ノードインスタンスのコンソール画面で確認可能
環境
- OpenShift v4.3.3
方法
openshift-install create clusterするときに読み込むclouds.yaml
にCA証明書を追加する。
ベースとなるclouds.yamlはHorizonから生成するのが楽。
clouds:
openstack:
auth:
auth_url: https://[keystone_fqdn]/v3
username: [username]
password: [password]
project_id: [project_id]
project_name: [project_name]
user_domain_name: [user_domain_name]
region_name: [region_name]
interface: "public"
identity_api_version: 3
cacert: [/path/to/ca.crt.pem] <-- コレを追加
自己署名証明書を使っている以上、CA証明書は持っているはず。それをローカル環境内に持ってきて、そのパスを指定させるだけ。
あとは勝手にそのCA証明書を読み込んでCoreOSが構成されてくれる。
もちろん、その後SwiftからIgnition Configを読み込み、コンフィギュレーションが進む。
CA証明書を読み込む過程は、ノードインスタンスのコンソール画面から確認可能。
うまくいっていれば、下記のようなログが記録されているはず。
[ 7.401392] ignition[983]: Adding "hogehoge.example.local" to list of CAs
注意
additionalTrustBundle
を使って証明書を渡す方法もある。確かにこれでもCoreOS側にCA証明書が渡すことができる。
しかし、OpenShift環境全体にそのCA証明書が行き渡っていないらしい。
そのため、その後のOpenShiftのコンフィギュレーション過程でエラーが発生する。私の環境では、consoleやingressなどが正しく起動しなかった。
※oc get clusteroperator
してみると、それらがAVAILABLEにならない
おまけ: install-config
参考程度に検証時に使用したinstall-config.yamlを置いておく。
といっても変わったところは全くない。openshift-install create install-configした情報そのまま。
apiVersion: v1
baseDomain: [domain]
compute:
- hyperthreading: Enabled
name: worker
platform: {}
replicas: 3
controlPlane:
hyperthreading: Enabled
name: master
platform: {}
replicas: 3
metadata:
creationTimestamp: null
name: [openshift_cluster_name]
networking:
clusterNetwork:
- cidr: 10.128.0.0/14
hostPrefix: 23
machineCIDR: 10.0.0.0/16
networkType: OpenShiftSDN
serviceNetwork:
- 172.30.0.0/16
platform:
openstack:
cloud: openstack
computeFlavor: [flavor_name]
externalDNS: null
externalNetwork: [external_nw_name]
lbFloatingIP: [floating_ip]
octaviaSupport: "0"
region: ""
publish: External
pullSecret: [pull_secret_json]
sshKey: |
[ssh_key_pem]
参考
本当に助かりました。ありがとうございました。