我已经创建了一个本地Minikube集群,然后是一个hello-world示例的部署。激活后,将同时创建一个服务。
apiVersion: apps/v1
kind: Deployment
metadata:
name: hello-world
spec:
selector:
matchLabels:
run: hello-world-example
replicas: 2
template:
metadata:
labels:
run: hello-world-example
spec:
containers:
- name: hello-world
image: gcr.io/google-samples/hello-app:2.0 # Works
ports:
- containerPort: 8080
protocol: TCP
---
apiVersion: v1
kind: Service
metadata:
name: hello-app-service
spec:
# type: NodePort
type: LoadBalancer
selector:
app.kubernetes.io/name: hello-world
ports:
- protocol: TCP
port: 8080
targetPort: 8080
# nodePort: 31579
我使用kubectl apply-f hello-app.yaml
应用部署和服务,最终得到以下示例服务:
| 名称空间|名称|目标端口|网址|
| - -----|- -----|- -----|- -----|
| 缺省|hello-app-service|八零八零|http://IP:31813|
| 缺省|库贝尔内特斯|无节点端口||
| 库贝系统|库贝-德恩斯|无节点端口||
注:我的实际IP其实不是“IP”
当我 curl hello-app-service的URL时,我最终得到这样的结果:
curl:(7)0 ms后无法连接到IP端口31813:连接被拒绝
但是,当我使用kubectl expose deployment hello-world --type=LoadBalancer --port=8080
在CLI中手动公开部署服务时
我得到以下结果:
| 名称空间|名称|目标端口|网址|
| - -----|- -----|- -----|- -----|
| 缺省|hello-app-service|八零八零|http://IP:31813|
| 缺省|你好世界|八零八零|http://IP:32168|
| 缺省|库贝尔内特斯|无节点端口||
| 库贝系统|库贝-德恩斯|无节点端口||
在我 curl 新服务“hello-world”的URL之后,我以正确的结果结束:
Hello,world!版本:2.0.0主机名:你好世界5 bb 7 fff 796-fmwl 8
有人能解释一下我的服务有什么问题吗?为什么CLI服务工作,而.yaml文件服务不工作,尽管使用相同的配置。我已经使用与CLI命令相同的服务设置(使用LoadBalancer类型)以及NodePort和设置特定端口进行了测试。
**版本:**操作系统:Ubuntu 22.04.2 LTS Docker版本:24.0.2 Kubectl版本:客户端版本:v1.27.2 Kustomize版本:v5.0.1服务器版本:v1.26.3 Minikube版本:v1.30.1
1条答案
按热度按时间sigwle7e1#
我会更改服务的选择器,使其正确Map到您的部署。此外,您可以在清单中手动分配外部IP:
EDITKubernetes service external ip pending您可以随时将服务更改为NodePort或IngressController,但由于您运行的是minikube,因此有一个“魔术命令”:
https://minikube.sigs.k8s.io/docs/handbook/accessing/