无法访问 Kubernetes 中主机的本地主机
Cannot reach localhost of host machine in Kubernetes
我有一个具有以下配置的 kubernetes 类集群:
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
nodes:
- role: control-plane
kubeadmConfigPatches:
- |
kind: InitConfiguration
imageGCHighThresholdPercent: 70
evictionHard:
nodefs.available: "0%"
nodefs.inodesFree: "0%"
imagefs.available: "70%"
nodeRegistration:
kubeletExtraArgs:
node-labels: "ingress-ready=true"
extraPortMappings:
- containerPort: 80
hostPort: 80
protocol: TCP
- containerPort: 443
hostPort: 443
protocol: TCP
图片版本:docker.io/kindest/base:v20220305-b67a383f
我正在尝试使用 ExternalName
:
连接到我的本地主机
kind: Endpoints
apiVersion: v1
metadata:
name: my-external-service
subsets:
- addresses:
- ip: 10.0.2.2
ports:
- port: 8080
---
kind: Service
apiVersion: v1
metadata:
name: my-external-service
labels:
app: my-external-service
spec:
ports:
- port: 8080
targetPort: 8080
protocol: TCP
根据这个答案:why do we use 10.0.2.2 to connect to local web server instead of using computer ip address in android client,该 IP 应该是我本地计算机中的本地主机。
然后我运行一个容器来调试这个设置:
kubectl run -i --tty --rm debug --image=alpine --restart=Never -- sh
8.8.8.8
可以 ping 通,但不幸的是我无法 ping 10.0.2.2
。
我做错了什么?
事实证明这不是 kubernetes 问题,而是 docker 一个 因为我 运行 善良 。 github 评论中描述了解决方案:https://github.com/kubernetes-sigs/kind/issues/1200#issuecomment-647145134
地址不是 10.0.2.2
,而是 172.17.0.1
,这是您的 docker 网桥默认网关。
我们还需要在主机
中添加这条iptables
规则
iptables -I INPUT -p tcp --dport <your server port> -j ACCEPT
我有一个具有以下配置的 kubernetes 类集群:
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
nodes:
- role: control-plane
kubeadmConfigPatches:
- |
kind: InitConfiguration
imageGCHighThresholdPercent: 70
evictionHard:
nodefs.available: "0%"
nodefs.inodesFree: "0%"
imagefs.available: "70%"
nodeRegistration:
kubeletExtraArgs:
node-labels: "ingress-ready=true"
extraPortMappings:
- containerPort: 80
hostPort: 80
protocol: TCP
- containerPort: 443
hostPort: 443
protocol: TCP
图片版本:docker.io/kindest/base:v20220305-b67a383f
我正在尝试使用 ExternalName
:
kind: Endpoints
apiVersion: v1
metadata:
name: my-external-service
subsets:
- addresses:
- ip: 10.0.2.2
ports:
- port: 8080
---
kind: Service
apiVersion: v1
metadata:
name: my-external-service
labels:
app: my-external-service
spec:
ports:
- port: 8080
targetPort: 8080
protocol: TCP
根据这个答案:why do we use 10.0.2.2 to connect to local web server instead of using computer ip address in android client,该 IP 应该是我本地计算机中的本地主机。
然后我运行一个容器来调试这个设置:
kubectl run -i --tty --rm debug --image=alpine --restart=Never -- sh
8.8.8.8
可以 ping 通,但不幸的是我无法 ping 10.0.2.2
。
我做错了什么?
事实证明这不是 kubernetes 问题,而是 docker 一个 因为我 运行 善良 。 github 评论中描述了解决方案:https://github.com/kubernetes-sigs/kind/issues/1200#issuecomment-647145134
地址不是 10.0.2.2
,而是 172.17.0.1
,这是您的 docker 网桥默认网关。
我们还需要在主机
中添加这条iptables
规则
iptables -I INPUT -p tcp --dport <your server port> -j ACCEPT