NodePort服务不是通过`port`数
问题描述:
外部访问的我有以下的服务配置:NodePort服务不是通过`port`数
kind: Service
apiVersion: v1
metadata:
name: web-srv
spec:
type: NodePort
selector:
app: userapp
tier: web
ports:
- protocol: TCP
port: 8090
targetPort: 80
nodePort: 31000
和nginx的容器是这样的服务的后面。虽然我可以通过nodePort
访问该服务,但无法通过port
字段访问服务。我可以看到配置kubectl
和Kubernetes仪表板,但curl
该端口(例如curl http://192.168.0.100:8090
)会产生连接拒绝错误。
我不确定这里有什么问题。我需要确保任何代理服务在节点或容器内运行吗?
答
获取kubernetes服务的IP,然后点击8090;它会工作。 nodePort意味着服务在端口31000
绑定到节点这些都是三样东西,将工作:
curl <node-ip>:<node-port> # curl <node-ip>:31000
curl <service-ip>:<service-port> # curl <svc-ip>:8090
curl <pod-ip>:<target-port> # curl <pod-ip>:80
所以,现在,让我们来看看3种情况:
1 。你在kubernetes集群(你是一个吊舱)
<service-ip>
和<pod-ip>
和<node-ip>
将工作。
2.您是节点
<service-ip>
和<pod-ip>
和<node-ip>
会努力。
3.您节点
只有<node-ip>
将工作假设<node-ip>
可达之外。
答
由于我假设您尝试从群集外部访问该服务,因此行为与预期相同。这意味着只有nodePort
才能将服务提供给群集外的世界。 port
指的是吊舱上的端口,由吊舱内的容器暴露。这通常是期望的行为,以支持通常由负载均衡器表示的服务集群。因此,负载平衡器将公开您希望用于您的服务的端口(例如load-balancer:80
)并转发到所有节点上的nodePort以分发负载。
如果您从群集内部访问服务,您应该可以通过service-name:service-port
得到它,这要归功于内置的DNS。
更多详细信息可在docs找到。
这对我完全有意义。我会对此进行测试,+1进行清晰的解释。 –
hmm,我在外部IP列中看到'',并在该服务的集群IP中看到'10.0.0.91'。这是什么意思? (对不起,如果这个问题太基本了) –
所有这些似乎只是对我而言。我用'kubectl describe服务'来得到''。我的服务有'端口'设为'80','targetPort'设为'8080','nodePort'设为'31000'。这些选项都没有奏效。我们应该做些什么吗? –
abrarisme