按照有关 Kubernetes 的教程进行操作,但在日志看起来不错后卡住了,但暴露的端口不起作用:使用 Chrome/curl 的“连接被拒绝”。
使用 yaml 文件通过 NodePort/ClusterIP 启动服务。
posts-srv.yaml - 更新
apiVersion: v1
kind: Service
metadata:
name: posts-srv
spec:
type: NodePort
selector:
app: posts
ports:
- name: posts
protocol: TCP
port: 4000
targetPort: 4000
nodePort: 32140
posts-depl.yaml - 更新
apiVersion: apps/v1
kind: Deployment
metadata:
name: posts-depl
spec:
replicas: 1
selector:
matchLabels:
app: posts
template:
metadata:
labels:
app: posts
spec:
containers:
- name: posts
image: suraniadi/posts
ports:
- containerPort: 4000
$ kubectl get deployments
NAME READY UP-TO-DATE AVAILABLE AGE
posts-depl 1/1 1 1 27m
$ kubectl get services
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 27h
posts-srv NodePort 10.111.64.122 <none> 4000:32140/TCP 21m
$ kubectl get pods
NAME READY STATUS RESTARTS AGE
posts-depl-79b6889f89-rxdv2 1/1 Running 0 26m
$ kubectl version
Client Version: version.Info{Major:"1", Minor:"19", GitVersion:"v1.19.7", GitCommit:"1dd5338295409edcfff11505e7bb246f0d325d15", GitTreeState:"clean", BuildDate:"2021-01-13T13:23:52Z", GoVersion:"go1.15.5", Compiler:"gc", Platform:"darwin/amd64"}
Server Version: version.Info{Major:"1", Minor:"19", GitVersion:"v1.19.7", GitCommit:"1dd5338295409edcfff11505e7bb246f0d325d15", GitTreeState:"clean", BuildDate:"2021-01-13T13:15:20Z", GoVersion:"go1.15.5", Compiler:"gc", Platform:"linux/amd64"}
答案 0 :(得分:1)
由于结构原因,最好在您的服务 yaml 配置文件中指定 nodePort,否则 kubernetes 将从 k8s 端口范围(30000-32767)中随机分配它。 在端口部分,它是一个端口列表,在您的情况下,无需指定名称,请检查 nodePort_docs 以获取更多信息。 这应该适合你:
apiVersion: v1
kind: Service
metadata:
name: posts-srv
spec:
type: NodePort
selector:
app: posts
ports:
- port: 4000
targetPort: 4000
nodePort: 32140
protocol: TCP
要连接到 nodePort 服务,请验证是否有任何防火墙服务已启动,然后验证是否在您的 VM 中启用了此端口:(centos 示例)
sudo firewall-cmd --permanent --add-port=32140/tcp
最后使用任何节点 IP 地址(不是 CLusterIP,此 IP 是无法在集群外部访问的内部 IP)和 nodePort 连接到此服务:
答案 1 :(得分:0)
除了@Hajed 的回答(毫无疑问的赞成)我想再次提到 Type NodePort Documentation,尤其是下一部分:
<块引用>请注意,此服务显示为 <NodeIP>:spec.ports[*].nodePort
和.spec.clusterIP:spec.ports[*].port
为了让您的 nodePort
服务按预期工作,请不要忘记使用 spec.ports[*].nodePort
您的服务应该是
apiVersion: v1
kind: Service
metadata:
name: posts-srv
spec:
type: NodePort
selector:
app: posts
ports:
- port: 4000
targetPort: 4000
nodePort: 32140 #you can use here 30000-32767 range. Just not forget to open firewall rule for this exact port further
protocol: TCP
几天前回答 similar nodePort question - 也检查一下,也许将来会有帮助。