2019年 01月の投稿を表示しています

kubectl port-forward to Service

kubectl port-forward って pod に対してだけしかできないと思っていたが Service に対してもできたみたい。

$ kubectl port-forward svc/my-service 5000

このとき、ポートフォワードを開始するタイミングでだけ k8s の名前解決が行われて、フォワードする先を決定する。
サービスに対してフォワードしているわけではないので、フォワードしたポートに何度リクエストを送ってもロードバランスされない。

Issue にもコメントがあるが port-forward はもともとがそういう用途ではなく 1 つの pod に対してフォワードするので、サービスに対して完全にフォワードするには pod がいなくなったときに再接続したりバランスするようにしたりなんだり、多くの機能追加になるので、別にしようやという話がある。

kubectl port-forward should allow forwarding to a Service · Issue #15180 · kubernetes/kubernetes · GitHub

Withなんちゃらなオプション

Go 文化なのかわからないけど New とか構造体作れる関数や初期化する関数へのオプションを設定するためのコールバック関数を設定するキメ文句をよく見るような気がする。

func WithInsecure() func(*Config) {
    return func(cfg *Config) {
        cfg.insecure = true
    }
}

func WithUserAgent(ua String) func(*Config) {
    return func(cfg *Config) {
        cfg.userAgent = ua
    }
}

func main() {
    req := NewRequest(
        WithInsecure(),
        WithUserAgent(),
    )
    req.Send()
}

こういう感じのやつ。

オプションを外のパッケージに対して隠せるっていうメリットがあるのかな。
流れに乗っておくと、雰囲気で利用できて便利そうだなーって思った。