Kubernetes Service 是一个抽象层,定义了如何访问 Pod。Service 提供了一个固定的 IP 地址和 DNS 名称,这样即使 Pod IP 改变,Service 也能保证能够连通。
以下是 k8s 中的四种 Service Types:
<NodeIP>:<NodePort>
来外部访问。
使用场景: 当你想要从集群外部访问服务,但不想使用 LoadBalancer 或其他方法时。my-service.my-namespace.svc.cluster.local
映射到 example.com
),但不提供任何其他方法。
使用场景: 当你想将 Service 指向一个外部服务时。NodePort
时,你可以指定一个端口号,或者让 k8s 自动生成。NodePort
,然后再迁移到 LoadBalancer
。ExternalName
时,确保应用可以解析外部域名。ClusterIP
apiVersion: v1
kind: Service
metadata:
name: my-clusterip-service
spec:
selector:
app: my-app
ports:
- protocol: TCP
port: 80
targetPort: 8080
NodePort
apiVersion: v1
kind: Service
metadata:
name: my-nodeport-service
spec:
type: NodePort
selector:
app: my-app
ports:
- protocol: TCP
port: 80
targetPort: 8080
nodePort: 30080
LoadBalancer
apiVersion: v1
kind: Service
metadata:
name: my-loadbalancer-service
spec:
type: LoadBalancer
selector:
app: my-app
ports:
- protocol: TCP
port: 80
targetPort: 8080
ExternalName
apiVersion: v1
kind: Service
metadata:
name: my-externalname-service
spec:
type: ExternalName
externalName: example.com
对于每个 Service 类型,你都可以在 spec.selector
字段中定义哪些 Pod 被选为该 Service 的后端,以及 spec.ports
字段定义 Service 的端口和相应的 Pod 的端口。