我是Kubernetes的新手,正在尝试部署一个简单的hello-world应用程序。我正在使用Ubuntu 20.04并在VMware工作站上运行它。我已经安装了minikube并尝试部署。然而,部署了Pod,但无法通过浏览器访问服务。
下面是我的deployment.yaml
文件:
---
kind: Service
apiVersion: v1
metadata:
name: exampleservice
spec:
selector:
name: myapp
ports:
- protocol: "TCP"
# Port accessible inside cluster
port: 8081
# Port to forward to inside the pod
targetPort: 8080
# Port accessible outside cluster
nodePort: 30000
type: NodePort
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: myappdeployment
spec:
replicas: 5
selector:
matchLabels:
name: myapp
template:
metadata:
labels:
name: myapp
spec:
containers:
- name: myapp
image: pritishkapli/example:v1.0.0
ports:
- containerPort: 8080
resources:
limits:
memory: 512Mi
cpu: "1"
requests:
memory: 256Mi
cpu: "0.2"
字符串
下面是kubernetes服务:
pritish@ubuntu:~$ kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
exampleservice LoadBalancer 10.101.149.155 <pending> 8081:30000/TCP 12m
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 9h
型
下面是运行的pod:
pritish@ubuntu:~$ kubectl get pods
NAME READY STATUS RESTARTS AGE
myappdeployment-b85b56d64-knhhc 1/1 Running 0 17m
myappdeployment-b85b56d64-m4vbg 1/1 Running 0 17m
myappdeployment-b85b56d64-qss4l 1/1 Running 0 17m
myappdeployment-b85b56d64-r2jq4 1/1 Running 0 17m
myappdeployment-b85b56d64-tflnz 1/1 Running 0 17m
型
救命啊!
PS:我已经更新了deployment.yaml
文件,它的工作如预期。
3条答案
按热度按时间vom3gejh1#
TL;DR
这不是
LoadBalancer
类型的Service
的问题,而是service.spec.selector
值和deployment.spec.selector.matchLabels
值之间的不匹配。如何修复设置?
要修复您的设置,您可以使用
Service
或Deployment
中的相同值。请仅选择以下选项之一:
deployment.yaml
更改:字符串
service.yaml
更改:型
你怎么知道这是
selector
的问题?这归结为使用Kubernetes的经验,但检查它的最简单方法是通过其中之一(使用旧示例):
kubectl describe service exampleservice
(由于可读性原因,部分输出被编辑)型
kubectl get endpoints exampleservice
个型
正如您在上面的输出中看到的,没有
endpoints
可以将流量发送到(Pods
)。minikube
上LoadBalancer
类型的服务从
minikube
上Loadbalancer
类型Service
的Angular 讲:最简单的方法是用
NodePort
连接。由于minikube
的本地特性,它不会获得分配的External IP
,除非您选择一种变通方法,例如:minikube tunnel
tunnel-创建一个路由到LoadBalancer类型部署的服务,并将其Ingress设置为其ClusterIP。详细示例请参见https://minikube.sigs.k8s.io/docs/tasks/loadbalancer
一个附加说明!
我没有亲自测试过,但你可以尝试一下:
$ minikube addons enable metallb
将其分配给CIDR
中的IP地址与minikube
示例相同,然后查询(curl
)这个新分配的IP地址。更多参考指南:
其他资源:
ztigrdn82#
您无法部署类型为loadbalance的服务,因为您的群集未设置loadbalancer。尝试使用NodePort或clusterIP类型部署服务
mrwjdhj33#
我遇到了这个错误,花了一整天的时间才弄清楚,对我来说,无法从外部访问Pod的原因是因为运行“kubectl get svc”时EXTERNAL IP为none外部IP:是从外部访问群集所需的。而外部IP为none的原因是因为您的类型为type:NodePort,将其更改为类型:LoadBalancer.type Loadbalancer是将流量从集群外部(Internet)引导到集群中的Pod。我认为NodePort在集群内,所以你的service.yaml文件应该是这样的。
字符串