Google Cloud Engineでkubernetesマスター(クラスター)に接続しようとしています。
kubectlがkubernetesマスターにアクセスしようとすると常に発生するエラーは次のとおりです。
サーバーXXX.XXX.XXX.XXXへの接続が拒否されました-正しいホストまたはポートを指定しましたか?
例えば:
$ kubectl version
Client Version: version.Info{Major:"1", Minor:"5", GitVersion:"v1.5.2", GitCommit:"08e099554f3c31f6e6f07b448ab3ed78d0520507", GitTreeState:"clean", BuildDate:"2017-01-12T04:57:25Z", GoVersion:"go1.7.4", Compiler:"gc", Platform:"linux/AMD64"}
The connection to the server XXX.XXX.XXX.XXX was refused - did you specify the right Host or port?
これまでのところ、クライアントがサーバーと同じバージョン(バージョン1.5.2)を使用していることを確認します。しかし、奇妙な理由で、接続を拒否しています。
$ gcloud beta container get-server-config
Fetching server config for europe-west1-c
defaultClusterVersion: 1.5.2
defaultImageType: GCI
validImageTypes:
- CONTAINER_VM
- GCI
validMasterVersions:
- 1.5.2
- 1.4.8
validNodeVersions:
- 1.5.2
- 1.5.1
- 1.4.8
- 1.4.7
- 1.4.6
- 1.3.10
- 1.2.7
Kubernetesマスタークラスター(サーバーバージョン)で、次のエラーが発生します。
# kubectl version
Client Version: version.Info{Major:"1", Minor:"5", GitVersion:"v1.5.2", GitCommit:"08e099554f3c31f6e6f07b448ab3ed78d0520507", GitTreeState:"clean", BuildDate:"2017-01-12T04:57:25Z", GoVersion:"go1.7.4", Compiler:"gc", Platform:"linux/AMD64"}
The connection to the server localhost:8080 was refused - did you specify the right Host or port?
Kubernetesクラスターマスターを作成するには、次の手順に従います。
export APP_NAME=brand-project
export GOOGLE_CONTAINER_NAME=b.gcr.io/brand/project
gcloud container clusters create $APP_NAME --zone europe-west1-c --machine-type g1-small --num-nodes 1
資格情報を取得して完全に設定しました。
gcloud config set container/cluster $APP_NAME
gcloud container clusters get-credentials $APP_NAME
gcloud auth application-default login
説明は良いです:
gcloud container clusters describe $APP_NAME
グーグルの設定も:
gcloud config list
コンテキストも合法的に見えます:
kubectl config get-contexts
私もkubernetesマスタークラスターにsshできますが、SSHのみで、HTTPやHTTPSはありません。たとえば、kubectlを適切に実行できます。
私も Kubernetes docs で読みました:
Google Container EngineはSSHトンネルを使用して、マスター->クラスタ通信パスを保護します。この構成では、apiserverはクラスター内の各ノードへのSSHトンネルを開始し(ポート22でリッスンするsshサーバーに接続)、kubelet、ノード、ポッド、またはサービス宛てのすべてのトラフィックをトンネル経由で渡します。このトンネルは、トラフィックがクラスタが実行されているプライベートGCEネットワークの外部に公開されないようにします。
したがって、接続を許可するためにKubernetes Clusterマスターで8000ポートを開く方法がわかりません(そして、Google Cloud Engineのファイアウォールですべてのポートを開くこともできないようです)。
私はアイデアがありません、そしてほとんどすべてのグーグル関連エントリを検索します。だから私はサーバーと接続するためにどのように解決するのか、またはプロセスで何が間違っているのか分かりません。どんな助けでも大歓迎です!
編集:
「 Container Registry Deprecation Notices 」を確認した後、コンテナの場所が次のようにb.gcr.ioではなくeu.gcr.ioに更新されました。
2017年2月28日、b.gcr.ioやbucket.gcr.ioなどの「独自のバケットを作成する」レジストリの使用は非推奨と見なされます。その日を過ぎると、Container Registryはそれらのバケット内にあったコンテナイメージを提供しなくなります。
しかし、問題はまだ解決しません。
私自身の答えを解決します。本当の問題は、DNS経由のaccounts.google.comへのアクセスと接続にあるようです。私がpingしたことを確認した後:
$ ping accounts.google.com
PING accounts.google.com (216.58.201.141) 56(84) bytes of data.
64 bytes from mad06s25-in-f13.1e100.net (216.58.201.141): icmp_seq=1 ttl=56 time=21.9 ms
64 bytes from mad06s25-in-f13.1e100.net (216.58.201.141): icmp_seq=2 ttl=56 time=19.0 ms
64 bytes from mad06s25-in-f13.1e100.net (216.58.201.141): icmp_seq=3 ttl=56 time=20.4 ms
^C
--- accounts.google.com ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2002ms
rtt min/avg/max/mdev = 19.070/20.468/21.914/1.173 ms
そして、コマンド中に開いているすべてのファイルを束ねます:
$ strace -eopenat kubectl version
openat(AT_FDCWD, "/proc/sys/net/core/somaxconn", O_RDONLY|O_CLOEXEC) = 3
openat(AT_FDCWD, "/proc/stat", O_RDONLY|O_CLOEXEC) = 3
openat(AT_FDCWD, "/proc/sys/kernel/hostname", O_RDONLY|O_CLOEXEC) = 3
Client Version: version.Info{Major:"1", Minor:"5", GitVersion:"v1.5.2", GitCommit:"08e099554f3c31f6e6f07b448ab3ed78d0520507", GitTreeState:"clean", BuildDate:"2017-01-12T04:57:25Z", GoVersion:"go1.7.4", Compiler:"gc", Platform:"linux/AMD64"}
openat(AT_FDCWD, "/home/shakaran/.kube/config", O_RDONLY|O_CLOEXEC) = 3
openat(AT_FDCWD, "/home/shakaran/.config/gcloud/application_default_credentials.json", O_RDONLY|O_CLOEXEC) = 3
openat(AT_FDCWD, "/etc/nsswitch.conf", O_RDONLY|O_CLOEXEC) = 3
openat(AT_FDCWD, "/etc/resolv.conf", O_RDONLY|O_CLOEXEC) = 3
openat(AT_FDCWD, "/proc/sys/kernel/hostname", O_RDONLY|O_CLOEXEC) = 4
openat(AT_FDCWD, "/etc/hosts", O_RDONLY|O_CLOEXEC) = 3
The connection to the server 104.155.120.114 was refused - did you specify the right Host or port?
+++ exited with 1 +++
私は開かれた接続を理解しようとします:
$ systemd-resolve --status | cat
Global
DNS Servers: 127.0.1.1
8.8.8.8
8.8.4.4
DNSSEC NTA: 10.in-addr.arpa
16.172.in-addr.arpa
168.192.in-addr.arpa
17.172.in-addr.arpa
18.172.in-addr.arpa
19.172.in-addr.arpa
20.172.in-addr.arpa
21.172.in-addr.arpa
22.172.in-addr.arpa
23.172.in-addr.arpa
24.172.in-addr.arpa
25.172.in-addr.arpa
26.172.in-addr.arpa
27.172.in-addr.arpa
28.172.in-addr.arpa
29.172.in-addr.arpa
30.172.in-addr.arpa
31.172.in-addr.arpa
corp
d.f.ip6.arpa
home
internal
intranet
lan
local
private
test
Link 10 (vboxnet3)
Current Scopes: LLMNR/IPv4 LLMNR/IPv6
LLMNR setting: yes
MulticastDNS setting: no
DNSSEC setting: allow-downgrade
DNSSEC supported: yes
Link 9 (vboxnet2)
Current Scopes: none
LLMNR setting: yes
MulticastDNS setting: no
DNSSEC setting: allow-downgrade
DNSSEC supported: yes
Link 8 (vboxnet1)
Current Scopes: none
LLMNR setting: yes
MulticastDNS setting: no
DNSSEC setting: allow-downgrade
DNSSEC supported: yes
Link 7 (vboxnet0)
Current Scopes: none
LLMNR setting: yes
MulticastDNS setting: no
DNSSEC setting: allow-downgrade
DNSSEC supported: yes
Link 6 (docker0)
Current Scopes: none
LLMNR setting: yes
MulticastDNS setting: no
DNSSEC setting: allow-downgrade
DNSSEC supported: yes
Link 5 (tun0)
Current Scopes: none
LLMNR setting: yes
MulticastDNS setting: no
DNSSEC setting: allow-downgrade
DNSSEC supported: yes
Link 3 (wlan0)
Current Scopes: DNS LLMNR/IPv4 LLMNR/IPv6
LLMNR setting: yes
MulticastDNS setting: no
DNSSEC setting: allow-downgrade
DNSSEC supported: no
DNS Servers: 8.8.8.8
8.8.4.4
Link 2 (eth0)
Current Scopes: none
LLMNR setting: yes
MulticastDNS setting: no
DNSSEC setting: allow-downgrade
DNSSEC supported: yes
インターフェイスの無効化を実行した後、tun0が有効になっている(accounts.google.comへの接続をブロックしている)openvpnを持っていることがわかりました。
Sudo ifconfig tun0 down
私は完全に得ます:
$ kubectl version
Client Version: version.Info{Major:"1", Minor:"5", GitVersion:"v1.5.2", GitCommit:"08e099554f3c31f6e6f07b448ab3ed78d0520507", GitTreeState:"clean", BuildDate:"2017-01-12T04:57:25Z", GoVersion:"go1.7.4", Compiler:"gc", Platform:"linux/AMD64"}
Server Version: version.Info{Major:"1", Minor:"5", GitVersion:"v1.5.2", GitCommit:"08e099554f3c31f6e6f07b448ab3ed78d0520507", GitTreeState:"clean", BuildDate:"2017-01-12T04:52:34Z", GoVersion:"go1.7.4", Compiler:"gc", Platform:"linux/AMD64"}
So sorry for all the noise. But probably it is a good idea add this in FAQ's or so for warning the users about VPNs
したがって、問題は主に拒否された接続でした。次のように、-v = 4を使用したデバッグに kubernetesプロジェクトの#41975 を使用すると便利です。
$ kubectl version -v=4
Client Version: version.Info{Major:"1", Minor:"5", GitVersion:"v1.5.2", GitCommit:"08e099554f3c31f6e6f07b448ab3ed78d0520507", GitTreeState:"clean", BuildDate:"2017-01-12T04:57:25Z", GoVersion:"go1.7.4", Compiler:"gc", Platform:"linux/AMD64"}
I0224 11:32:36.914299 30751 helpers.go:221] Connection error: Get https://XXX.XXX.XXX.XXX/api: Post https://accounts.google.com/o/oauth2/token: dial tcp: lookup accounts.google.com on 127.0.1.1:53: read udp 127.0.0.1:46403->127.0.1.1:53: read: connection refused
F0224 11:32:36.914378 30751 helpers.go:116] The connection to the server XXX.XXX.XXX.XXX was refused - did you specify the right Host or port?