Mac Docker Desktop Kubernetes连接本地8087端口Java应用的IP配置问题
在Docker Desktop(Mac)Kubernetes中指向本地主机服务的Endpoints配置
在Mac的Docker Desktop Kubernetes环境中,集群内Pod无法通过127.0.0.1访问宿主机服务——因为Pod的127.0.0.1指向自身容器,而非Mac宿主机。你需要填写以下两类IP之一到Endpoints中:
1. 宿主机的内网IP
获取Mac宿主机的内网IP:
- 打开终端,执行命令:
ipconfig getifaddr en0(WiFi网络用en0,以太网用en1) - 得到类似
192.168.1.105的IP地址,将其填入Endpoints的ip字段。
2. Docker Desktop专属网关IP
Docker Desktop在Mac上提供了固定网关IP(对应DNS名称host.docker.internal),获取方式:
- 终端执行:
ping host.docker.internal,返回的IP通常为192.168.65.2(版本不同可能略有差异) - 将该IP填入Endpoints的
ip字段。
修正你的配置
注意:原Service配置中的selector必须删除——当Service存在selector时,Kubernetes会自动生成Endpoints,覆盖你手动定义的配置。修正后的完整配置如下:
Service与Endpoints
apiVersion: v1 kind: Service metadata: name: auth spec: # 移除selector,让Service使用手动定义的Endpoints ports: - protocol: TCP port: 80 targetPort: 8087 --- kind: Endpoints apiVersion: v1 metadata: name: auth subsets: - addresses: - ip: 192.168.1.105 # 替换为你的宿主机内网IP或Docker网关IP ports: - port: 8087
Ingress配置(保持原有即可)
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: router annotations: kubernetes.io/ingress.class: nginx spec: rules: - host: localhost http: paths: - path: /api/user pathType: Prefix backend: service: name: auth port: number: 80
验证连接
进入集群内的测试Pod,验证是否能访问本地服务:
kubectl run -it --rm busybox --image=busybox:1.36 -- sh # 在Pod内执行 wget -qO- auth:80/api/user
若返回本地Java应用的响应,说明配置生效。
内容的提问来源于stack exchange,提问作者rgolovakha
相关产品推荐
相关产品推荐

