Service资源
尽管每个 Pod 都有一个唯一的 IP 地址,但是如果没有 Service ,这些 IP 不会暴露在集群外部。
- ClusterIP:在集群的内部 IP 上公开 Service 。这种类型使得 Service 只能从集群内访问。
- NodePort:使用 NAT 在集群中每个选定 Node 的相同端口上公开 Service
- LoadBalancer: 在当前云中创建一个外部负载均衡器(如果支持的话),并为 Service 分配一个固定的外部IP
- ExternalName: 通过返回带有该名称的 CNAME 记录,使用任意名称公开 Service。
参考文档
在集群中暴露 Pod
创建pod
vim my-nginx.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-nginx
spec:
selector:
matchLabels:
run: my-nginx
replicas: 6
template:
metadata:
labels:
run: my-nginx
spec:
containers:
- name: my-nginx
image: nginx
ports:
- containerPort: 80
kubectl apply -f my-nginx.yaml
kubectl get pods -o wide
NodePort类型暴露Service
vim service.yaml
apiVersion: v1
kind: Service
metadata:
name: my-nginx
labels:
run: my-nginx
spec:
type: NodePort
ports:
- port: 8080
targetPort: 80
protocol: TCP
name: http
selector:
run: my-nginx
kubectl apply -f servcie.yaml
kubectl get service my-nginx
我们查看一下服务的详细信息
kubectl describe service my-nginx
所以说8080端口是VIP10.1.132.180的端口
我们进入容器内部把显示的页面更改,查看负载均衡的效果。
我们多次访问VIP的8080端口可以看到负载均衡效果
使用集群外的同网段机器访问宿主机的31944端口,可以看到负载均衡效果。