/ etc / environment๊ฐ ์๋๋ฉฐ kubeadm์ด ์คํ์ค์ธ ํ์ฌ bash ์ธ์
์ด ์๋๋ฉฐ docker ๋๋ kubelet ํ๊ฒฝ์ด ์๋๋๋ค. ์ด ๋ชจ๋ ์ธ์คํด์ค์์ no_proxy
๋ฅผ ๋ค๋ฅธ ๊ฐ์ผ๋ก ์ค์ ํ์ฌ์ด๋ฅผ ํ์ธํ์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ด๋ค ์ด์ ๋ก kubeadm init
์ดํ์๋ ์ฌ์ ํ no_proxy
๋ํด ๋ค๋ฅธ ๊ฐ์ ๊ณ์ ์ค์ ํฉ๋๋ค. ๋ค์ ์์, ๋ฐ๋ชฌ ๋ค์๋ก๋, ์๋น์ค ๋ค์ ์์์ ๊ทธ ์ฌ์ค์ ๋ณ๊ฒฝํ์ง ์์ต๋๋ค.
์์งํ "ip ์ฃผ์ fo.oo.ba.rr์ ํ๋ก์๊ฐ blubb๋ก ์ค์ ๋์ด ์์ต๋๋ค."๋ผ๋ ์ค๋ง ์ถ๋ ฅํ๋ ๊ฒ์ด ์ ๋ง ์ง์ฆ๋ฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ํ๋ก์ ์ค์ ๊ณผ ๊ด๋ จํ์ฌ ์ง์ ํ ์ง์ค์ ์์ฒ ์ธ / etc / environment์์ ๊ฐ์ ์ฝ์ง ์๋ ์ด์ ๋๋ ๊ฐ์ฅ ์ฌ์ด kubeadm
๋ฅผ ํธ์ถํ๋ ํ์ฌ bash ์ธ์
๋ณ๊ฒฝํ ์ฅ์?
๋ด๊ฐ ๊ธฐ๋ํ๋ ๊ฒ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
http_proxy
ํฉ๋๋ค. (๋๋ ๋ณด์ ํต์ ์ด ๊ตฌ์ฑ๋ ๊ฒฝ์ฐ https_proxy
)HTTP_PROXY
๋ฅผ ํ์ธํ๊ณ ๋ค๋ฅธ ๊ฒฝ์ฐ ๊ฒฝ๊ณ ํฉ๋๋ค.http_proxy
๋ฅผ ํ์ธํฉ๋๋ค. ๋ค๋ฅธ ๊ฒฝ์ฐ ๊ฒฝ๊ณ ํฉ๋๋ค.kubeadm reset
ํธ์ถํ๋ ์ค๋ฅ ๋ผ๊ณ ๊ฐ์ ํฉ๋๋ค.no_proxy
์ค์ (๋ ์ถ๊ฐ๋์ ์์ฒ๋ฅผ๋ฐ์ ์ ์์ต๋๋ค). <-๋ํ no_proxy
๋ ์ค์ ๋ก IP๊ฐ ์๋ ์ด๋ฆ์ ์๋ฏธํ๋ฏ๋ก ๊ฐ๋ฅํ๋ฉด ํธ์คํธ ์ด๋ฆ์ ์ฌ์ฉํ๋ ๊ฒ์ด ํจ์ฌ ์ข์ต๋๋ค.๊ธฐ์ ๋คํธ์ํฌ์์ ์ฌ๋๋ค์ ๊ตฌํ ์์๋ ๊ทผ๋ฌด ์๊ฐ์ ์ง์งํ๊ฒ ํํํ ์ ์์ต๋๋ค.
@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 ๊ฐ ํด๋น ์ํ์ ์์ ์์ด๋ฏ๋ก ์ง๋ฌธ์ ๋ตํด ๋๋ฆฌ๊ฒ ์ต๋๋ค.
์ฒ์ ๋ช ๊ฐ์ง ๋ต๋ณ :
$ 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=10.0.0.0/8, 192.168.0.0/16
์ ๊ฐ์ ๊ฒ์ ๋ฃ์ผ๋ฉด ์๋ฌด ํจ๊ณผ๊ฐ ์์ผ๋ฉฐ ๋นํ ์ ๊ฒ์ฌ์์ ๊ฒฝ๊ณ ๊ฐ ์์ฑ๋ฉ๋๋ค.๋๋ ๋ชจ๋ ํด๋ฌ์คํฐ ๋ ธ๋ IP๋ฅผ NO_PROXY์ ํฌํจํ๊ณ ํด๋ฌ์คํฐ์ ์ฐธ์ฌํ ๋ ๋ชจ๋ ๋ฏธ๋์ธ์ ๋์ผํ NO_PROXY๋ฅผ ์ฌ์ฉํ์ฌ์ด ๋ฌธ์ ๋ฅผ "์์ "ํ์ต๋๋ค.
$ export NO_PROXY = 'ip, ip, ip, ip, .example.com'
[๋ง์คํฐ] $ kubeadm init
[minion] $ kubeadm join --token = {token} abcd : 6443
์์งํ ๋งํด์ ๋ชจ๋ IP ์ฃผ์๊ฐ ์ด๊ฑฐ๋๋์ง ์๋๋ฉด ๋ฌธ์ ๋ฅผ ํด๊ฒฐ ํ .example.com์ธ์ง ์ ๋ชจ๋ฅด๊ฒ ์ต๋๋ค.
PR kubernetes / kubernetes # 52788์ด ๋ณํฉ๋๋ ๊ฒฝ์ฐ ๋ ธ๋์ NO_PROXY IP ๋ฒ์์์ ์ง์ ํ ์ ์์ต๋๋ค. ๊ทธ๊ฒ์ ์ผ์ ๋ง์ด ๋จ์ํ ํ ๊ฒ์ ๋๋ค.
์กฐ๊ธ ์ด์ํด. "checks.go"์ฝ๋๋ฅผ ์ดํด๋ณด๋ฉด.
ํ๋ก์์ ๊ฐ์ด ์์ผ๋ฉด ํญ์ ์ค๋ฅ ๋ฉ์์ง๋ฅผ ๋ฐํํฉ๋๋ค.
if proxy! = nil {
return [] error {fmt.Errorf ( "% q์ ๋ํ ์ฐ๊ฒฐ์ ํ๋ก์ % q๋ฅผ ์ฌ์ฉํฉ๋๋ค. ์๋ํ์ง ์์ ๊ฒฝ์ฐ ํ๋ก์ ์ค์ ์ ์กฐ์ ํ์ญ์์ค.", url, proxy)}, nil
}
nil, nil ๋ฐํ
๊ธฐ์
์์๋ ๋ฐ๋์ ์ธ ๊ฐ์ง ํ๋ก์ ์ต์
์ด ์์ต๋๋ค. (http_proxy, https_proxy, no_proxy)
http_ *๋ ์ธํฐ๋ท ์ฐ๊ฒฐ์ ์ํด ์ด๋ฏธ์ง๋ฅผ ๊ฐ์ ธ ์ค๋ ํ์ ์ต์
์
๋๋ค.
no_proxy ์ต์
์ด ์ค์ ๋์ด ์์ผ๋ฉด ์ค๋ฅ ๋ฉ์์ง๊ฐ ๋ฐํ๋ฉ๋๋ค.
"pl, ๋ด๋ถ ์ฐ๊ฒฐ์ ์ํด ํ๋ก์๋ก ๋ผ์ฐํ ๋์ง ์๋๋ก ์ต์ (no_proxy) ์ค์ "
kubeadm join์ด http_proxy๋ฅผ ์ง์ํ๋์ง ๋ฌป๊ณ ์ถ์ต๋๋ค.
kubeadm init๊ฐ http_proxy ๋ฐ no_proxy์ ํจ๊ป ์๋ํ๋๋ก ๊ด๋ฆฌํ์ง๋ง kubeadm join์ด ๋ค์๊ณผ ๊ฐ์ ์ค๋ฅ๋ฅผ ์์ฑํ๋ ๊ฒ ๊ฐ์ต๋๋ค.
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๊ฐ kubeadm ์กฐ์ธ์ ๋ํด ์์ง ์ง์๋์ง ์๋๋ค๊ณ ๋ฏฟ๊ฒํ์ต๋๋ค.
์ด ๋ฌธ์ ์ ๋ค์ ํ ๋ฒ ๋ถ๋ช์นฉ๋๋ค. ์ฌ์ ํ ํ๋ก์๋ฅผ ์๋ชป ์ฌ์ฉํ๊ณ ํ๋ก์ ๋ฐ no_proxy ์ค์ ์ ์์ ํ ์์๋ ๊ฒ ๊ฐ์ต๋๋ค.
# 687, # 182 ๋๋ ์คํ ์ค๋ฒํ๋ก ์ฐธ์กฐ :
๋ด ๊ฒฝํ์ kubeadm์ / etc / environment์ ์ ์ ๋ ํ๋ก์๋ฅผ ์ฌ์ฉํฉ๋๋ค.
๋ด ๊ฒฝํ์ kubeadm์ / etc / environment์ ์ ์ ๋ ํ๋ก์๋ฅผ ์ฌ์ฉํฉ๋๋ค.
๋ค-์ ๊ฒฝ์ฐ์๋ / etc / environment
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
๋๋ ๋ชจ๋ ํด๋ฌ์คํฐ ๋ ธ๋ IP๋ฅผ NO_PROXY์ ํฌํจํ๊ณ ํด๋ฌ์คํฐ์ ์ฐธ์ฌํ ๋ ๋ชจ๋ ๋ฏธ๋์ธ์ ๋์ผํ NO_PROXY๋ฅผ ์ฌ์ฉํ์ฌ์ด ๋ฌธ์ ๋ฅผ "์์ "ํ์ต๋๋ค.
์์งํ ๋งํด์ ๋ชจ๋ IP ์ฃผ์๊ฐ ์ด๊ฑฐ๋๋์ง ์๋๋ฉด ๋ฌธ์ ๋ฅผ ํด๊ฒฐ ํ .example.com์ธ์ง ์ ๋ชจ๋ฅด๊ฒ ์ต๋๋ค.