我有以下清单
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: my-redis
spec:
selector:
matchLabels:
app: my-redis
replicas: 1
template:
metadata:
labels:
app: my-redis
spec:
containers:
- name: my-redis
image: redis
ports:
- name: redisport1
containerPort: 6379
hostPort: 6379
---
apiVersion: v1
kind: Service
metadata:
name: redis-service
labels:
app: my-redis
spec:
type: NodePort
selector:
name: my-redis
ports:
- name: redisport1
port: 6379
targetPort: 6379
nodePort: 30036
protocol: TCP
Run Code Online (Sandbox Code Playgroud)
这是一个重现我的问题的示例。我的目的是创建一个简单的集群,其中包含一个带有Redis容器的Pod,并且应该将其公开给我的本地主机。尽管如此,获取服务仍然为我提供以下输出:
redis-service NodePort 10.107.233.66 <none> 6379:30036/TCP 10s
Run Code Online (Sandbox Code Playgroud)
如果我用LoadBalancer交换NodePort,我会得到一个外部IP,但是端口仍然不起作用。
您能帮我确定为什么我无法将6379端口映射到我的本地主机吗?
谢谢,
Emr*_*ain 11
为了通过节点端口访问您的应用程序,您必须使用此 url
http://{node ip}:{node port}。
如果您使用 minikube,则您的 minikube ip 是节点 ip。您可以使用minikube ip命令检索它。
您还可以使用minikube service redis-service --url命令获取 url 以通过节点端口访问您的应用程序。
Aka*_*tov 10
对于任何对这个问题感兴趣的人,我发现了这个问题。在 Ijaz 修复之后,我还需要更改选择器以匹配 pod 中的标签,这是我的一个错字!
pod 有“app=my-redis”标签,但服务选择器有“name=my-redis”。匹配它们解决了访问问题。
不需要主机端口:
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: my-redis
spec:
selector:
matchLabels:
app: my-redis
replicas: 1
template:
metadata:
labels:
app: my-redis
spec:
containers:
- name: my-redis
image: redis
ports:
- name: redisport1
containerPort: 6379
---
apiVersion: v1
kind: Service
metadata:
name: redis-service
labels:
app: my-redis
spec:
type: NodePort
selector:
name: my-redis
ports:
- name: redisport1
port: 6379
targetPort: 6379
nodePort: 30036
protocol: TCP
Run Code Online (Sandbox Code Playgroud)
现在可以使用 nodePort 30036 访问任何工作节点上的服务。
如果集群节点在其他地方,并且您想让端口在本地客户端上可用,那么只需执行 kubectl port forward 即可
kubectl port-forward svc/redis-service 6379:6379
Run Code Online (Sandbox Code Playgroud)
https://kubernetes.io/docs/tasks/access-application-cluster/port-forward-access-application-cluster/
笔记:
| 归档时间: |
|
| 查看次数: |
3589 次 |
| 最近记录: |