Kubeadm: kubeadmはどこからプロキシ蚭定を取埗したすか

䜜成日 2017幎06月28日  Â·  13コメント  Â·  ゜ヌス: kubernetes/kubeadm

これは/ etc / environmentではなく、kubeadmが実行されおいる珟圚のbashセッションではなく、dockerたたはkubelet環境でもありたせん。 これらすべおのむンスタンスでno_proxyを異なる倀に蚭定するこずで、これを確認したした。 そしお、いく぀かの理由で埌にkubeadm initそれはただのために別の倀を蚭定し続けおno_proxy 。 再起動、デヌモンの再読み蟌み、サヌビスの再起動はすべお、その事実を倉えるものではありたせん。

正盎なずころ、倀の取埗元を指定するのではなく、「IPアドレスfo.oo.ba.rrのプロキシがblubbに蚭定されおいたす」ずいう行だけを出力するのは本圓に面倒です。 そしお、プロキシ蚭定に関しお真の信頌できる唯䞀の情報源である/ etc / environment、たたは最も簡単なkubeadmを呌び出す珟圚のbashセッションから倀を単玔に読み取らないのはなぜですか。倉曎を加える堎所は

私が期埅するのは次のようなものです

  1. kubeadmは、珟圚の環境倉数http_proxyチェックしたす。 たたは、安党な通信が構成されおいる堎合はhttps_proxy 
  2. kubeadmは、珟圚の環境倉数HTTP_PROXYをチェックし、異なる堎合は譊告したす。
  3. kubeadmは/ etc / environmentのhttp_proxyをチェックしたす。 違う堎合は譊告したす。
  4. 倧文字に぀いおも同様です。
  5. どちらのコンテキストにも倉数がない堎合は、プロキシがないず芋なしお通知したす。
  6. kubeadmは、指定されたプロキシを䜿甚しおマニフェストファむルDockerコンテナを䜜成する前にこれが行われるず想定を曞き蟌み、プロセス環境蚭定を小文字、倧文字、小文字/ etc / environment、倧文字/ etcの順に優先したす。 /環境。
  7. kubeadmがポッドを起動したす。
  8. kubeadmは、コントロヌラヌマネヌゞャヌがAPIサヌバヌず通信できるかどうかを確認したす。 「犁止」たたは「タむムアりト」が発生した堎合は、プロキシ蚭定が間違っおいお゚ラヌであるずkubeadm reset呌び出したす。
  9. 出力なしで氞遠に埅機するむベントはありたせん。 api-serverずcontroller-managerのログに継続的な゚ラヌがあるかどうか、および10分以䞊の新しいログがあるかどうかを少なくずも合理的に把握できたす。 そしお、察応する゚ラヌメッセヌゞで゚ラヌになる可胜性がありたす。
  10. kubeadmは内郚で事前に保留さは、すべおのアドレスを宣䌝no_proxyの蚭定それはカットを埗るこずができ、゚ンドを远加したす。 <-たた、 no_proxyは実際にはIPではなく名前を察象ずしおいるため、可胜であればホスト名を䜿甚する方がはるかに優れおいたす。

゚ンタヌプラむズネットワヌクの人々をどれだけの劎働時間節玄できるかを真剣に衚珟するこずはできたせん。

help wanted prioritbacklog

最も参考になるコメント

すべおのクラスタヌノヌドIPをNO_PROXYに含め、クラスタヌに参加するずきにすべおのミニオンで同じNO_PROXYを䜿甚するこずで、この問題を「修正」したした。

$ export NO_PROXY = 'ip、ip、ip、ip、.example.com'
[マスタヌ] $ kubeadm init
[ミニオン] $ kubeadm join --token = {token} abcd6443

正盎なずころ、列挙されおいるすべおのIPアドレスなのか、問題を修正した.example.comなのかはわかりたせん。

党おのコメント13件

@erikbgithubこの問題を
私はそのような環境であたり実隓しおいないので、前もっお私は代理の専門家ではないず蚀わなければなりたせん。

したがっお、䞊蚘の正確なステヌトメントに぀いお実際にコメントするこずはできたせんが、プロキシの背埌での動䜜を改善するためにkubeadmに貢献したい堎合は、非垞にうれしく思いたす。

あなたの質問に答えるために、ここに関連するgoコヌドがありたす
https://github.com/kubernetes/kubernetes/blob/master/cmd/kubeadm/app/phases/controlplane/manifests.go#L432

func getProxyEnvVars() []v1.EnvVar {
    envs := []v1.EnvVar{}
    for _, env := range os.Environ() {
        pos := strings.Index(env, "=")
        if pos == -1 {
            // malformed environment variable, skip it.
            continue
        }
        name := env[:pos]
        value := env[pos+1:]
        if strings.HasSuffix(strings.ToLower(name), "_proxy") && value != "" {
            envVar := v1.EnvVar{Name: name, Value: value}
            envs = append(envs, envVar)
        }
    }
    return envs
}

https://github.com/kubernetes/kubernetes/blob/master/cmd/kubeadm/app/preflight/checks.go#L291

// HTTPProxyCheck checks if https connection to specific host is going
// to be done directly or over proxy. If proxy detected, it will return warning.
type HTTPProxyCheck struct {
    Proto string
    Host  string
    Port  int
}

func (hst HTTPProxyCheck) Check() (warnings, errors []error) {

    url := fmt.Sprintf("%s://%s:%d", hst.Proto, hst.Host, hst.Port)

    req, err := http.NewRequest("GET", url, nil)
    if err != nil {
        return nil, []error{err}
    }

    proxy, err := http.DefaultTransport.(*http.Transport).Proxy(req)
    if err != nil {
        return nil, []error{err}
    }
    if proxy != nil {
        return []error{fmt.Errorf("Connection to %q uses proxy %q. If that is not intended, adjust your proxy settings", url, proxy)}, nil
    }
    return nil, nil
}

゚ンタヌプラむズネットワヌクの人々をどれだけの劎働時間節玄できるかを真剣に衚珟するこずはできたせん。

これ以䞊同意できたせんでした

cc @kad @timothysc

@luxasありがずう私はラりンドチュヌトを取埗したずきにそれを凊理したす。 パッチを提䟛する前に、いく぀かの方法を孊ぶ必芁があるので、他の人が今のずころ解玄しおくれれば幞いです。 ;-)

私が調べる最初のサブ質問は、実際にos.Environ()介しお䜕が埗られるかです。

@erikbgithubパッチの䜜成に぀いおサポヌトが必芁な堎合はサポヌトさせおいただきたす

その小切手の原䜜者ずしおの@erikbgithub 、どんな質問にも喜んでお答えしたす。
最初のいく぀かの答え

  • kubeadmは、珟圚実行䞭のセッションから環境を取埗しおチェックしたす。 $ env | grep -i _proxy= | sortを実行するず、䜕があるかがわかりたす。 たずえば、䌚瀟のファむアりォヌルの内偎には、次のようなものがありたす。
    !shell $ env | grep -i _proxy= | sort ALL_PROXY=http://proxy-ir.example.com:911 FTP_PROXY=http://proxy-ir.example.com:911 HTTPS_PROXY=http://proxy-ir.example.com:911 HTTP_PROXY=http://proxy-ir.example.com:911 NO_PROXY=.example.com all_proxy=http://proxy-ir.example.com:911 ftp_proxy=http://proxy-ir.example.com:911 http_proxy=http://proxy-ir.example.com:911 https_proxy=http://proxy-ir.example.com:911 no_proxy=.example.com $
  • 人々が気付かずに螏んでいる通垞の問題、no_proxy倉数はネットワヌク範囲をサポヌトNO_PROXY=10.0.0.0/8, 192.168.0.0/16ようなものを入れおも効果はなく、飛行前のチェックで譊告が衚瀺されたす。
  • 倧文字ず小文字の* _proxy倉数間のコンテンツの違いは重芁ではありたせん。 プロキシ環境倉数を凊理するGoコヌドには、凊理する順序の内郚ロゞックがありたす芚えおいるように、最初に倧文字、次に小文字ですが、各アプリがそれらを凊理する順序を保蚌するこずはできたせん。
  • / etc / environmentのようなファむルはディストリビュヌション固有であり、個々のバむナリによっお読み取られるこずはありたせん。 これらは、ログむンスクリプト、PAMモゞュヌルなどによっお読み取られ、プロセス環境倉数に挿入されたす。環境倉数は、kubeadmなどの他のバむナリを呌び出しおいるずきに、SSHセッションや倖郚管理ツヌルansibleなどから取埗するこずもできたす。 したがっお、特定の/ etc / environmentなどに䟝存するこずは、実行可胜でも論理的でもありたせん。
  • 8ポむントの堎合、プリフラむトチェックは特にそれに関するものです。 kubeadmがプロキシを介しおAPIサヌバヌに移行しおいるこずを怜出するず、譊告が衚瀺されたす。 最初はこの飛行前チェックに぀いおの議論でしたが、これらのケヌスは正圓である可胜性があるこずが合意されたため、譊告のみが発生
  • 10の堎合耇数の人からこれらの倉数を操䜜するこずに぀いおも反察でした。 私の最初のアむデアは、すべおの* _proxy蚭定を削陀しお盎接接続を匷制するこずでしたが、プロキシ経由で接続する正圓な理由である可胜性があるため、拒吊されたした。

すべおのクラスタヌノヌドIPをNO_PROXYに含め、クラスタヌに参加するずきにすべおのミニオンで同じNO_PROXYを䜿甚するこずで、この問題を「修正」したした。

$ export NO_PROXY = 'ip、ip、ip、ip、.example.com'
[マスタヌ] $ kubeadm init
[ミニオン] $ kubeadm join --token = {token} abcd6443

正盎なずころ、列挙されおいるすべおのIPアドレスなのか、問題を修正した.example.comなのかはわかりたせん。

PR kubernetes / kubernetes52788がマヌゞされる堎合、ノヌドのNO_PROXYIP範囲で指定するこずが可胜になりたす。 それは物事を倧いに単玔化するでしょう。

少しおかしくなった。 コヌド「checks.go」を調べるず。
プロキシに倀がある堎合は垞に゚ラヌメッセヌゞを返したす。

プロキシの堎合= nil {
return [] error {fmt.Errorf "qぞの接続はプロキシqを䜿甚したす。それが意図されおいない堎合は、プロキシ蚭定を調敎しおください"、url、proxy}、nil
}
nil、nilを返したす

゚ンタヌプラむズでは...必然的に3぀のプロキシオプションがありたす。 http_proxy、https_proxy、no_proxy
http_ *は、むンタヌネットに接続するためにむメヌゞをプルするための必須オプションです。
no_proxyオプションが蚭定されおいる堎合は、゚ラヌメッセヌゞが返されたす。

「pl、内郚接続のためにプロキシにルヌティングされないようにオプションno_proxyを蚭定しおください」

kubeadm joinがhttp_proxyをサポヌトしおいるかどうかを尋ねたいですか

kubeadm initをhttp_proxyずno_proxyで動䜜させるこずができたしたが、kubeadmjoinが次のような゚ラヌを生成するようです。

kubelet.go:2105] Container runtime network not ready: NetworkReady=false reason:NetworkPluginNotReady message:docker: network plugin is not ready: cni config uninitialized

remote_runtime.go:92] RunPodSandbox from runtime service failed: rpc error: code = Unknown desc = failed pulling image "gcr.io/google_containers/pause-amd64:3.0": Get https://gcr.io/v1/_ping: read tcp <my-ip>:58742->74.125.68.82:443: read: connection reset by peer

そしおたた
/ etc / environmentは、マスタヌのように構成で満たされるのではなく、空です。

これは、おそらくhttp_proxyずno_proxyがkubeadmjoinでただサポヌトされおいないこずを信じさせおくれたす。

この問題にもう䞀床遭遇したす。 それでもプロキシが正しく䜿甚されおおらず、プロキシずno_proxyの蚭定を倉曎できないようです。

687、182、たたはスタックオヌバヌフロヌを参照しおください https 

私の経隓から、kubeadmは/ etc / environmentで定矩されたプロキシを䜿甚したす

私の経隓から、kubeadmは/ etc / environmentで定矩されたプロキシを䜿甚したす

うん-私の堎合は/ etc / environmentでもありたす

このペヌゞは圹に立ちたしたか
0 / 5 - 0 評䟡