Help us understand the problem. What is going on with this article?

自己署名SSL証明書を使っているOpenStack環境にてOpenShiftをデプロイするには

前提

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を読み込むことができない。
具体的には以下のような形。

  1. openshift-install create clusterを実行
  2. bootstrap-nodeやmaster-nodeが作成される
  3. 全ノードでx509: certificate signed by unknown authorityというエラーを出力され、ブートできない状態が続く
    • 各ノードインスタンスのコンソール画面で確認可能

環境

  • OpenShift v4.3.3

方法

openshift-install create clusterするときに読み込むclouds.yamlにCA証明書を追加する。
ベースとなるclouds.yamlはHorizonから生成するのが楽。

clouds.yaml
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した情報そのまま。

install-config.yaml
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]

参考

本当に助かりました。ありがとうございました。

gzock
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away