Vis*_*rez 5 kubernetes kubernetes-pod kubernetes-service
我有一个使用以下内容创建的正在运行的 Pod pod-definition.yaml:
apiVersion: v1
kind: Pod
metadata:
name: microservice-one-pod-name
labels:
app: microservice-one-app-label
type: front-end
spec:
containers:
- name: microservice-one
image: vismarkjuarez1994/microserviceone
ports:
- containerPort: 2019
Run Code Online (Sandbox Code Playgroud)
然后我使用以下命令创建了一个服务service-definition.yaml:
kind: Service
apiVersion: v1
metadata:
name: microserviceone-service
spec:
ports:
- port: 30008
targetPort: 2019
protocol: TCP
selector:
app: microservice-one-app-label
type: NodePort
Run Code Online (Sandbox Code Playgroud)
然后我跑去kubectl describe node minikube寻找我应该连接的节点 IP——结果是:
Addresses:
InternalIP: 192.168.49.2
Hostname: minikube
Run Code Online (Sandbox Code Playgroud)
但是当我运行以下curl命令时没有得到任何响应:
curl 192.168.49.2:30008
Run Code Online (Sandbox Code Playgroud)
192.168.49.2:30008当我尝试从浏览器访问时,请求也会超时。
Pod 日志显示容器已启动并正在运行。为什么我无法访问我的服务?
问题是您尝试通过参数访问您的服务,port该参数是将公开服务的内部端口,即使使用NodePort类型也是如此。
您正在搜索的参数称为,可以选择将其与和nodePort一起指定。引用文档:porttargetPort
默认情况下,为了方便起见,Kubernetes 控制平面将从一个范围中分配一个端口(默认
30000-32767:)
由于您没有指定nodePort,因此会自动选取该范围内的一个。您可以通过以下方式检查是哪一个:
kubectl get svc -owide
Run Code Online (Sandbox Code Playgroud)
然后在该端口从外部访问您的服务。
作为替代方案,您可以将服务定义更改为:
kind: Service
apiVersion: v1
metadata:
name: microserviceone-service
spec:
ports:
- port: 30008
targetPort: 2019
nodePort: 30008
protocol: TCP
selector:
app: microservice-one-app-label
type: NodePort
Run Code Online (Sandbox Code Playgroud)
但请记住,您可能需要删除服务并重新创建它才能更改nodePort分配的服务。
| 归档时间: |
|
| 查看次数: |
6552 次 |
| 最近记录: |