【发布时间】:2020-10-04 02:56:22
【问题描述】:
我有两个 Kubernetes 对象,
apiVersion: v1
kind: Pod
metadata:
name: client-pod
labels:
component: web
spec:
containers:
- name: client
image: stephengrider/multi-client
resources:
limits:
memory: "128Mi"
cpu: "500m"
ports:
- containerPort: 3000
apiVersion: v1
kind: Service
metadata:
name: client-node-port
spec:
type: NodePort
selector:
component: web
ports:
- port: 3050
targetPort: 3000
nodePort: 31515
然后我都使用kubectl apply -f <file_name> 应用,这是输出
kubectl get services
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
client-node-port NodePort 10.100.230.224 <none> 3050:31515/TCP 30m
pod 输出
NAME READY STATUS RESTARTS AGE
client-pod 1/1 Running 0 28m
但是当我运行minikube ip 时,它返回 127.0.0.1,
我正在使用带有 docker 驱动程序的 minikube。
在关注此问题https://github.com/kubernetes/minikube/issues/7344 之后。 我得到了 node-ip 使用
kubectl get node -o json |
jq --raw-output \
'.items[0].status.addresses[]
| select(.type == "InternalIP")
.address
'
但即便如此,我也无法访问该服务。经过更多搜索,我发现了
minikube service --url client-node-port
???? Starting tunnel for service client-node-port.
|-----------|------------------|-------------|------------------------|
| NAMESPACE | NAME | TARGET PORT | URL |
|-----------|------------------|-------------|------------------------|
| default | client-node-port | | http://127.0.0.1:52694 |
|-----------|------------------|-------------|------------------------|
http://127.0.0.1:52694
❗ Because you are using a Docker driver on darwin, the terminal needs to be open to run it.
我可以使用 minikube 服务访问该服务。
问题:
- 但我想知道为什么暴露的nodePort 不起作用?
- 为什么我要使用这种解决方法来访问应用程序。
更多信息:
minikube version
minikube version: v1.10.1
commit: 63ab801ac27e5742ae442ce36dff7877dcccb278
docker version
Client: Docker Engine - Community
Version: 19.03.8
API version: 1.40
Go version: go1.12.17
Git commit: afacb8b
Built: Wed Mar 11 01:21:11 2020
OS/Arch: darwin/amd64
Experimental: false
Server: Docker Engine - Community
Engine:
Version: 19.03.8
API version: 1.40 (minimum version 1.12)
Go version: go1.12.17
Git commit: afacb8b
Built: Wed Mar 11 01:29:16 2020
OS/Arch: linux/amd64
Experimental: false
containerd:
Version: v1.2.13
GitCommit: 7ad184331fa3e55e52b890ea95e65ba581ae3429
runc:
Version: 1.0.0-rc10
GitCommit: dc9208a3303feef5b3839f4323d9beb36df0a9dd
docker-init:
Version: 0.18.0
GitCommit: fec3683
kubectl version
Client Version: version.Info{Major:"1", Minor:"16+", GitVersion:"v1.16.6-beta.0", GitCommit:"e7f962ba86f4ce7033828210ca3556393c377bcc", GitTreeState:"clean", BuildDate:"2020-01-15T08:26:26Z", GoVersion:"go1.13.5", Compiler:"gc", Platform:"darwin/amd64"}
Server Version: version.Info{Major:"1", Minor:"18", GitVersion:"v1.18.2", GitCommit:"52c56ce7a8272c798dbc29846288d7cd9fbae032", GitTreeState:"clean", BuildDate:"2020-04-16T11:48:36Z", GoVersion:"go1.13.9", Compiler:"gc", Platform:"linux/amd64"}
如果您需要更多信息,我愿意提供。
minikube ssh
docker@minikube:~$ ip -4 a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
4: docker0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
inet 172.18.0.1/16 brd 172.18.255.255 scope global docker0
valid_lft forever preferred_lft forever
945: eth0@if946: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default link-netnsid 0
inet 172.17.0.2/16 brd 172.17.255.255 scope global eth0
valid_lft forever preferred_lft forever
【问题讨论】:
-
您要连接到哪个 URL?你得到什么错误?
-
@DavidMaze 应用程序在容器内的 3000 端口运行,containerPort 是 3000,端口 - 3050,targetPort 是 3000 & nodePort 是 31515,我正在尝试访问我的应用程序的基本 url,意思是 http: //
: / 例如:minikube_ip:31515 -
简单地列出您的 minikube 主机上可用的网络接口及其 IPv4 地址不是更容易吗?当您在 Minikube 主机/节点上运行
ip -4 a时,它会显示什么? -
@mario 感谢您的回复。已在帖子中添加
ip -4 a回复,请查看。 -
那么您不能通过
http://172.17.0.2:31515访问您的应用程序吗?
标签: docker kubernetes minikube