我在本地计算机上有一个集群Kubernetes集群,还有一个树莓派。为了测试集群,我创建了一个nginx部署和一个我想作为NodePort访问的服务。但是因为上帝知道原因,所以我无法使用上述服务。下面是我的部署和服务文件。
kubectl get nodes
NAME STATUS ROLES AGE VERSION
anima Ready master 7d5h v1.16.1
bahamut Ready <none> 7d4h v1.16.1
我的服务和部署文件:
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx
spec:
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:latest
resources:
limits:
memory: "128Mi"
cpu: "500m"
ports:
- containerPort: 80
nodeSelector:
kubernetes.io/hostname: bahamut
apiVersion: v1
kind: Service
metadata:
name: nginx
spec:
selector:
app: nginx
ports:
- port: 3030
targetPort: 80
type: NodePort
在kubectl get pods -o wide
之后:
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
nginx-67c8c4b564-6x7g5 1/1 Running 0 6m21s 10.244.1.13 bahamut <none> <none>
我的部署,kubectl get deployments -o wide
:
NAME READY UP-TO-DATE AVAILABLE AGE CONTAINERS IMAGES SELECTOR
nginx 1/1 1 1 7m55s nginx nginx:latest app=nginx
我的服务,kubectl get svc -o wide
:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 7d5h <none>
nginx NodePort 10.102.203.77 <none> 3030:30508/TCP 8m54s app=nginx
最后,kubectl get endpoints -o wide
:
NAME ENDPOINTS AGE
kubernetes 192.168.25.4:6443 7d5h
nginx 10.244.1.13:80 9m41s
我的Kubernetes主本地IP是192.168.25.4
,而树莓派IP是192.168.25.6
。部署服务后,我尝试了:
curl 192.168.25.6:3030
curl: (7) Failed to connect to 192.168.25.6 port 3030: Connection refused
curl 192.168.25.6:80
curl: (7) Failed to connect to 192.168.25.6 port 80: Connection refused
curl 192.168.25.6:30508 (hangs)
也尝试使用主节点IP,服务IP和列出的群集IP,但没有任何效果。
编辑
如果我在部署中使用hostNetwork=true
并使用容器端口上的节点本地IP对其进行访问,则它可以工作,但是显然这不是我想要的。我想了解为什么Kubernetes不允许我通过该服务访问容器。
答案 0 :(得分:3)
答案 1 :(得分:1)
port
应该是服务80
公开的端口的值。
如果要将节点端口固定为特定值,请将服务更改为以下内容:
- port: 80
nodePort: 30030
请注意,节点端口范围为30000 - 32767
之后,您应该可以查询:
curl <node>:30030
答案 2 :(得分:0)
问题出在法兰绒接口上。 ip link delete flannel.1
并重新启动绒布容器后,该服务开始正常运行。