目录
零、--type
ClusterIP:集群内部的访问
kubectl expose deployment mydeploy --port=8000 --target-port=80 --type=ClusterIP
NodePort:集群外部也可以访问
kubectl expose deployment mydeploy --port=8000 --target-port=80 --type=NodePort
一、ClusterIP
将一组 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
在安装好后再看:
yaml方式
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
二、NodePort
说白了k8s会随机选一个端口号(30000-32767之间),然后给pod中的每一个node都开启这个节点来访问。
命令行方式
kubectl expose deployment mydeploy --port=8000 --target-port=80 --type=NodePort
yaml方式
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