0
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?

OKEのOCI Native Ingress ControllerでTLSバージョン・暗号スイートのミスマッチを解決する

Last updated at Posted at 2025-08-02

はじめに

OKEのOCI Native Ingress ControllerでIngressを作成した時に、TLS周りの仕様?でハマったので、今後ハマる人が出ないよう私の事例を説明します。

注意点

この記事は、2025年2月に試したときの話なので、現在は改善されている可能性があります。(その後のアップデート内容を見る限りだと、おそらくまだ問題は起きそうです)

OCI Native Ingress ControllerのTLS周りの問題点

ドキュメントの通りに設定すると、サイト表示が以下のようなTLS関連のエラー ERR_SSL_VERSION_OR_CIPHER_MISMATCH になることがあります。
※証明書の発行の仕方にもよるかもしれませんが

390256548-a34bdbc6-9bfe-46f6-bb17-88287fa6c301.png

OCI Native Ingress Controller では、TLSバージョンや暗号スイートを指定できない

2025年2月時点だとOCI Native Ingress Controllerでは、TLSバージョンや暗号スイートを指定できません。

以下の公式ドキュメントに設定方法は載っていません。

なお、TLSバージョンの指定をしたい旨は、私が公式にissueを挙げています。(間違えて会社アカウントでissueを立ててしまった)

Can't specify the TLS version to use on the listener · Issue #109 · oracle/oci-native-ingress-controller

解決方法

(推奨)リスナープロトコルをHTTP2にする

Ingressのmanifestで oci-native-ingress.oraclecloud.com/protocolHTTP2 に指定します。

説明も含めて、Ingressの参考のmanifestを載せます。

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: native-ic-ingress
  labels:
    app.kubernetes.io/managed-by: Helm
  annotations:
    oci-native-ingress.oraclecloud.com/healthcheck-protocol: "HTTP"
    oci-native-ingress.oraclecloud.com/healthcheck-port: "80"
    oci-native-ingress.oraclecloud.com/healthcheck-path: "/api/v2/healthcheck"

    # 2025年2月現在では、リスナーのTLSバージョンと暗号スイートが指定できず、TLSバージョンは1.2のみになる
    # protocolは無指定だとTCPになり、その場合は暗号スイートが oci-default-ssl-cipher-suite-v1 になる
    # しかし、TLS1.2のみだと、 oci-default-ssl-cipher-suite-v1 はブラウザでエラーになる
    # HTTP2を指定すると、暗号スイートが oci-default-http2-ssl-cipher-suite-v1 になり、TLS1.2のみでもエラーにならない
    oci-native-ingress.oraclecloud.com/protocol: "HTTP2"
    oci-native-ingress.oraclecloud.com/backend-tls-enabled: "false" # ロードバランサーでTLSを終端する
spec:
  ingressClassName: native-ic-ingress-class
  tls:
  - hosts:
      - {{ .Values.ingress.Ingress.host | quote }}
    secretName: cl-tls
  rules:
  - host: {{ .Values.ingress.Ingress.host | quote }}
    http:
      paths:
        - pathType: Prefix
          path: "/"
          backend:
            service:
              name: web-app-service
              port:
                number: 443

解決方法に気づいたきっかけ

TLSバージョンを指定できないのは、先ほど紹介したissueでわかったので、暗号スイートを指定する機能がないかを公式リポジトリで探していました。そのとき、以下のコードを見つけました。

ProtocolHTTP2DefaultCipherSuite        = "oci-default-http2-ssl-cipher-suite-v1"

検索結果のURL
https://github.com/search?q=repo%3Aoracle%2Foci-native-ingress-controller%20suite&type=code

HTTP2 にすれば暗号スイートが oci-default-http2-ssl-cipher-suite-v1 になりそうだと思い、試したら oci-default-http2-ssl-cipher-suite-v1 になり、TLS1.2のみでもブラウザでエラーにならないことがわかりました。

(非推奨)手動でリスナーのTLSバージョンに1.3を追加する

OCIのコンソールやCLIから、Ingressで作成されたロードバランサーのリスナーのTLSバージョンに1.3を追加することはできます。

また、この設定は、証明書をOCIの証明書サービス方式←→k8sのsecretの入れ替えをしない限りは、applyしても維持される模様です。

390256586-e1931019-5004-4666-b8af-d77bd92ea205.png

ただし、Ingressを作り直したり、リスナー周りの設定を変えたらTLSバージョンがデフォルトの1.2だけになる可能性があるので、私はおすすめしません!

おわりに

おわり

0
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
0
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?