核心内容摘要
拉拉做菜视频高清
在K8S service类型中NodePort 服务包含了 ClusterIP 服务的所有能力。
这是一个重要的核心概念NodePort 服务是在 ClusterIP 服务基础上的扩展而不是一个独立的替代品。
详细解释
架构层次NodePort Service ClusterIP Service NodePort 端口映射
实际访问方式一个 NodePort 类型的 Service 实际上同时支持三种访问方式方式一通过 ClusterIP内部访问✅apiVersion:v1kind:Servicemetadata:name:my-servicespec:type:NodePort# 注意这里指定的是 NodePortselector:app:my-appports:-port:80# ClusterIP 端口targetPort:8080# Pod 端口nodePort:30007# NodePort 端口可选系统自动分配集群内部访问# 通过 ClusterIP 直接访问curlhttp://cluster-ip:80# 通过 DNS 域名访问完全支持✅curlhttp://my-service.default.svc.cluster.local:80curlhttp://my-service:80# 同一命名空间内可省略后缀方式二通过 NodePort外部访问# 通过任何节点的 IP NodePort 访问curlhttp://node-ip:30007方式三通过 LoadBalancer如果有云提供商如果你在云环境还可以配置 LoadBalancer它又是在 NodePort 基础上的扩展。
DNS 解析验证# 查看服务详情kubectl get svc my-service# NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S)# my-service NodePort
10.
96.
1
456 none 80:30007/TCP# 查看 DNS 解析kubectl run -it --rmtest--imagebusybox --restartNever --nslookupmy-service# Server:
10.
96.
10# Address 1:
10.
96.
10 kube-dns.kube-system.svc.cluster.local## Name: my-service# Address 1:
10.
96.
1
456 my-service.default.svc.cluster.local
实际示例apiVersion:apps/v1kind:Deploymentmetadata:name:nginx-deployspec:replicas:2selector:matchLabels:app:nginxtemplate:metadata:labels:app:nginxspec:containers:-name:nginximage:nginx:alpineports:-containerPort:80---apiVersion:v1kind:Servicemetadata:name:nginx-servicespec:type:NodePort# NodePort 类型selector:app:nginxports:-port:80# 集群内访问端口targetPort:80# Pod 端口nodePort:30080# 节点端口测试访问#
在集群内部通过 DNS 访问ClusterIP 能力kubectlexec-itpod-name--curlhttp://nginx-service#
从外部通过 NodePort 访问curlhttp://任意节点IP:
流量流向示意外部用户 ↓ Node IP:NodePort (如
192.
168.
100:
↓ Service ClusterIP (如
10.
96.
1
456:
↓ Pod IP:Port (如
10.
244.
2:
8080)