Abh*_*kar 4 cluster-computing docker kubernetes devops aws-eks
这是我的service.yaml代码:
kind: Service
apiVersion: v1
metadata:
name: login
spec:
selector:
app: login
ports:
- protocol: TCP
name: http
port: 5555
targetPort: login-http
type: NodePort
Run Code Online (Sandbox Code Playgroud)
我写的服务类型为
type: NodePort
Run Code Online (Sandbox Code Playgroud)
但当我点击命令如下时,它不会将外部IP显示为"节点":
'kubectl get svc'
Run Code Online (Sandbox Code Playgroud)
这是输出:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.100.0.1 <none> 443/TCP 7h
login NodePort 10.100.70.98 <none> 5555:32436/TCP 5m
Run Code Online (Sandbox Code Playgroud)
请帮我理解错误.
您的服务没有任何问题,您应该可以使用它来访问它<your_vm_ip>:32436.
顾名思义,NodePort在所有节点(VM)上打开一个特定端口,发送到该端口的任何流量都将转发到该服务.因此,在您的节点上,端口32436已打开,将接收此端口上的所有外部流量并将其转发到登录服务.
编辑:
nodePort是群集外部的客户端将"看到"的端口.nodePort通过kube-proxy在集群中的每个节点上打开.使用iptables magic Kubernetes(k8s)然后将流量从该端口路由到匹配的服务pod(即使该pod在完全不同的节点上运行).
nodePort是唯一的,因此2个不同的服务不能分配相同的nodePort.声明后,k8s master会为该服务保留nodePort.然后在每个节点(主服务器和工作服务器)上打开nodePort - 也就是不运行该服务的pod的节点 - k8s iptables magic负责路由.这样,您就可以从k8s群集外部向nodePort上的任何节点发出服务请求,而无需担心是否在那里安排了pod.
请参阅以下文章,它显示了公开服务的不同方法:
| 归档时间: |
|
| 查看次数: |
1974 次 |
| 最近记录: |