go - `KUBERNETES_PORT_443_TCP_ADDR` 是如何设置的?任何指向 Kubernetes 源代码的指针?

标签 go kubernetes

当我使用 kubectl run 在 Kubernetes 中运行图像时,环境变量被注入(inject)到容器中。

我的问题是值是错误的。我没有在 10.0.0.1 上运行任何东西。我相信正确的值应该是 10.1.0.1。据我所知,这种错误配置会导致下面重现的 kube-dns 错误。

我想问一下这些变量是如何注入(inject)到容器中的,最好是链接到处理这个问题的代码(我找不到任何东西)。此外,还有一些提示可能来自 10.0.0.1 值。

广告连播变量:

$ kubectl run -i --image=busybox --restart=Never -t busybox
If you don't see a command prompt, try pressing enter.
/ # env
KUBERNETES_SERVICE_PORT=443
KUBERNETES_PORT=tcp://10.0.0.1:443
HOSTNAME=busybox
SHLVL=1
HOME=/root
TERM=xterm
KUBERNETES_PORT_443_TCP_ADDR=10.0.0.1
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
KUBERNETES_PORT_443_TCP_PORT=443
KUBERNETES_PORT_443_TCP_PROTO=tcp
KUBERNETES_SERVICE_PORT_HTTPS=443
KUBERNETES_PORT_443_TCP=tcp://10.0.0.1:443
KUBERNETES_SERVICE_HOST=10.0.0.1
PWD=/

kube-dns 错误:

$ kubectl --namespace kube-system logs kube-dns-2190035132-gxf80 kubedns
[...]
E0119 10:04:05.271499      55 reflector.go:199] k8s.io/dns/vendor/k8s.io/client-go/tools/cache/reflector.go:94: Failed to list *v1.Service: Get https://10.0.0.1:443/api/v1/services?resourceVersion=0: dial tcp 10.0.0.1:443: i/o timeout
I0119 10:04:05.771477      55 dns.go:174] Waiting for services and endpoints to be initialized from apiserver...

我的配置中最接近 10.0.0.1 的是 --service-cluster-ip-range=10.0.0.0/24 我给的参数到 kube-apiserver

我的 etcd 中有 IP 10.0.0.1

# ETCDCTL_API=3 etcdctl get "" --from-key
[...]
/registry/services/specs/default/kubernetes
k8s

v1Service


kubernetes▒default"*$b198bc22-fcff-11e7-83a9-185e0fec8ce528B
                                                           Z
        component       apiserverZ
provider
kuberneteszC
▒
httpsTCP▒▒(10.0.0.1"    ClusterIPClientIPBRZ`▒
▒"
/registry/services/specs/kube-system/kubernetes-dashboard
k8s

v1Service

kubernetes-dashboard▒
                     kube-system"*$b9f0daef-fcff-11e7-83a9-185e0fec8ce528B
                                                                         ԾZ,
addonmanager.kubernetes.io/mode ReconcileZ
ppkubernetes-dashboardZ*
kubernetes.io/minikube-addons   dashboardZ3
&kubernetes.io/minikube-addons-endpoint dashboardb
0kubectl.kubernetes.io/last-applied-configuration{"apiVersion":"v1","kind":"Service","metadata":{"annotations":{},"labels":{"addonmanager.kubernetes.io/mode":"Reconcile","app":"kubernetes-dashboard","kubernetes.io/minikube-addons":"dashboard","kubernetes.io/minikube-addons-endpoint":"dashboard"},"name":"kubernetes-dashboard","namespace":"kube-system"},"spec":{"ports":[{"nodePort":30000,"port":80,"targetPort":9090}],"selector":{"app":"kubernetes-dashboard"},"type":"NodePort"}}
z_

TCP▒PG▒(
ppkubernetes-dashboard▒ 10.0.0.82NodePort:NoneBRZCluster`▒
▒"

最佳答案

https://github.com/kubernetes/kubernetes/blob/v1.9.0/pkg/kubelet/envvars/envvars.go#L45-L48我通过 git grep SERVICE_PORT

找到的

如果您的 kubernetes.default.svc.cluster.local 指向错误的 IP,则可能 kubectl --namespace=kube-system edit svc kubernetes并更改 ClusterIP 可以解决这个问题;不过,我面前没有集群来测试它

关于go - `KUBERNETES_PORT_443_TCP_ADDR` 是如何设置的?任何指向 Kubernetes 源代码的指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48338872/

相关文章:

sql - 为什么我的 SQL 占位符没有被替换(使用 Go pq)?

kubernetes - 如何使用 RBAC 阻止 exec 进入 pod

kubernetes - 如何从 Helm 中的渲染中排除 CustomResourceDefinition?

kubernetes:通过 kops 部署时的 CA 文件

go - 检查go代码是否已经格式化

c - 为什么这个简单的循环在 Go 中比在 C 中更快?

golang webapp init.d 脚本挂起

node.js - 在本地而不是远程导入 Go 包

如果库存仅为本地主机,则与多个组共享 ansible 变量

docker - 公共(public) GKE 集群中的 pod 无法访问互联网