結論
AWSのkubernetes便利ツールeksctlは便利だけど、proxy環境下では IRSAの設定(open-id-connect-provider)が出来ない
——— 追記
現在は対応しているようです。
ただし、まだ試していませんが、最新のソースを見る限り動くように見えます。
概要
AWSから正式にIRSA(IAM Roles for Service Accounts)サポートのアナウンスがありました。
IRSAは、今までだと kiam や kube2iam を使って POD 単位に IAM の設定をしていましたが、AWSが公式に同じような機能を実装したものです。
詳細はこちら。
早速使ってみました。クラスターはできるのですが、なぜかエラー出ます。
2019-10-02T14:27:07+09:00 [✖] connecting to issuer OIDC (https://oidc.eks.ap-northeast-1.amazonaws.com:443/id/123456AAAAAAAA): read tcp 10.100.92.52:59412->54.65.237.84:443: read: connection reset by peer
どうやら、 opene id connect providerの作成でエラーになっているようです。
2019-10-02T14:27:07+09:00 [▶] DEBUG: Validate Response iam/GetOpenIDConnectProvider failed, attempt 0/13, error NoSuchEntity: OpenIDConnect Provider not found for arn arn:aws:iam::.......略
調査
とりあえず、チュートリアルをコピペしてみたのですが。動きません。
そのほか、色々試してみたのですが、どうしても上手くいきません。
結局ソースを確認するしかないので、調べてみました。
エラーメッセージを頼りにとりあえず grep。
ありました。
// getIssuerCAThumbprint obtains thumbprint of root CA by connecting to the
// OIDC issuer and parsing certificates
func (m *OpenIDConnectManager) getIssuerCAThumbprint() error {
config := &tls.Config{InsecureSkipVerify: m.insecureSkipVerify}
conn, err := tls.Dial("tcp", m.issuerURL.Host, config)
if err != nil {
return errors.Wrapf(err, "connecting to issuer OIDC (%s)", m.issuerURL)
}
defer conn.Close()
むむ、proxyには対応してないようです。
これを試しているのは、proxy が必要な環境なので、おそらくこれが原因でしょう。
公式ドキュメントに書いてある、OIDC IdP(Open ID Connect ID Provider)のCAの取得手順である、以下の操作をそのまま実装しているようです。
3. ウェブブラウザに表示されるドキュメントで、"jwks_uri" を検索します(ウェブブラウザの検索機能を使用して、ページでこのテキストを見つけます)。 テキスト "jwks_uri" の直後のコロン (:) の後に URL があります。URL の完全修飾ドメイン名をコピーします。https:// または最上位ドメインより後のパスは含めないでください。
4. OpenSSL コマンドラインツールを使用して、次のコマンドを実行します。keys.example.com を、ステップ 3 で取得したドメイン名に置き換えます。
openssl s_client -servername keys.example.com -showcerts -connect keys.example.com:443
それでどうしたか
今回は動作検証が目的なので、素直に直接インターネットに出られるインスタンスを立てました。あまり参考にならずにすみません _o_