一个 KubernetesService可以在服务定义中有一个targetPort和:port
Service
targetPort
port
kind: Service apiVersion: v1 metadata: name: my-service spec: selector: app: MyApp ports: - protocol: TCP port: 80 targetPort: 9376
port和 和有什么不一样targetPort?
服务: 这会将流量引导到 pod。
TargetPort: 这是您的应用程序在容器内运行的实际端口。
端口: 有时您的容器内的应用程序在不同的端口上提供不同的服务。
示例: 实际应用程序可以运行8080,并且该应用程序的健康检查可以8089在容器的端口上运行。因此,如果您在没有端口的情况下访问服务,它不知道应该将请求重定向到容器的哪个端口。服务需要有一个映射,以便它可以访问容器的特定端口。
8080
8089
kind: Service apiVersion: v1 metadata: name: my-service spec: selector: app: MyApp ports: - name: http nodePort: 30475 port: 8089 protocol: TCP targetPort: 8080 - name: metrics nodePort: 31261 port: 5555 protocol: TCP targetPort: 5555 - name: health nodePort: 30013 port: 8443 protocol: TCP targetPort: 8085
如果您点击my-service:8089流量被路由到8080容器(targetPort)。同样,如果您点击my- service:8443它,它将被重定向到8085容器(targetPort)。但这myservice:8089是 Kubernetes 集群内部的,可以在一个应用程序想要与另一个应用程序通信时使用。因此,要从集群外部访问服务,需要在运行 kubernetes 的主机上公开端口,以便将流量重定向到容器的端口。这是node port(主机上暴露的端口)。从上面的示例中,您可以通过host_ip:nodePort
my-service:8089
my- service:8443
8085
myservice:8089
node port
host_ip:nodePort
假设您的主机 ip 是您可以通过, ,10.10.20.20访问 http、metrics、health services 。10.10.20.20:30475``10.10.20.20:31261``10.10.20.20:30013
10.10.20.20
10.10.20.20:30475``10.10.20.20:31261``10.10.20.20:30013