目录
ClusterIP:集群内部的访问
kubectl expose deployment mydeploy --port=8000 --target-port=80 --type=ClusterIP
NodePort:集群外部也可以访问
kubectl expose deployment mydeploy --port=8000 --target-port=80 --type=NodePort
将一组 Pods 公开为网络服务的抽象方法,在集群内使用service的IP:PORT就可以负载均衡的访问。
先创建一个deploy:
kubectl create deployment mydeploy --image=nginx --replicas=2
分别进去把ngx里的html页面改一下,用于后续区分(两个都改一下,一个1 一个2):
cd /usr/share/nginx/html/
echo '1'>index.html

查看IP:
kubectl get pod -owide

curl一下:

下面的问题是咱们pod的ip并不一样,所以创建了一个service以统一的访问它们,并达到负载均衡的目的(把pod内部的80端口统一的映射成8000端口):
kubectl expose deploy mydeploy --port=8000 --target-port=80 --type=ClusterIP
查看一下service:
kubectl get service

访问:
curl IP:8000

效果如上图。
若在容器内,甚至可以用域名的方式来访问:
域名=服务名.所在名称空间.svc
curl mydeploy.default.svc:8000
只是ngx镜像内没有直接提供curl命令,你需要apt-get一下:
apt-get update
apt-get install -y curl
在安装好后再看:

- apiVersion: v1
- kind: Service
- metadata:
- labels:
- app: mydeploy
- name: mydeploy
- spec:
- selector:
- app: mydeploy
- ports:
- - port: 8000
- protocol: TCP
- targetPort: 80
使用标签检索Pod:
kubectl get pod -l app=mydeploy

说白了k8s会随机选一个端口号(30000-32767之间),然后给pod中的每一个node都开启这个节点来访问。
kubectl expose deployment mydeploy --port=8000 --target-port=80 --type=NodePort
- apiVersion: v1
- kind: Service
- metadata:
- labels:
- app: my-dep
- name: my-dep
- spec:
- ports:
- - port: 8000
- protocol: TCP
- targetPort: 80
- selector:
- app: my-dep
- type: NodePort