k8s-service暴露pod

service暴露pod----nginx

1.编写nginx-deployment.yaml文件

[root@k8s-master deployment]# vim nginx-deployment.yaml
[root@k8s-master deployment]# cat nginx-deployment.yaml 
apiVersion: apps/v1
kind: Deployment
metadata:
  name: deployment
  namespace: default
spec:
  selector:
    matchLabels:
      app: web
  replicas: 2
  template:
    metadata:
      name: test-nginx
      labels:
        app: web
    spec:
      containers:
      - name: test-nginx
        image: daocloud.io/library/nginx
        ports:
        - containerPort: 80

2.应用并查看

[root@k8s-master deployment]# kubectl apply -f nginx-deployment.yaml 
deployment.apps/nginx-deployment created
[root@k8s-master deployment]# kubectl get pod |grep nginx-deployment
nginx-deployment-c68c96bb7-g9xqn   1/1     Running       0             90s
nginx-deployment-c68c96bb7-mthsb   1/1     Running       0             90s

3.编写nginx-service.yaml文件

[root@k8s-master deployment]# vim nginx-service.yaml

[root@k8s-master deployment]# cat nginx-service.yaml 
apiVersion: v1
kind: Service
metadata: 
  name: my-service
spec:
  type: NodePort                #类型,以NodePort的方式暴露端口给外网
  ports:                        
    - nodePort: 30005                #node节点暴露的端⼝
      port: 8080                        #ClusterIP的端⼝
      targetPort: 80                #pod节点的端⼝
  selector:                #标签选择器
    app: web

4.应用并测试

[root@k8s-master deployment]# kubectl get service
NAME         TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)   AGE
kubernetes   ClusterIP   10.96.0.1    <none>        443/TCP   9d
[root@k8s-master deployment]# kubectl apply -f nginx-service.yaml 
service/my-service created
[root@k8s-master deployment]# kubectl get service
NAME         TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)          AGE
kubernetes   ClusterIP   10.96.0.1       <none>        443/TCP          9d
my-service   NodePort    10.111.86.105   <none>        8080:30005/TCP   5s
[root@k8s-master deployment]# kubectl get endpoints
NAME         ENDPOINTS                       AGE
kubernetes   192.168.22.139:6443             9d
my-service   10.244.1.33:80,10.244.2.29:80   41s

5.打开浏览器输入node节点IP:端口测试

 Service暴露pod----tomcat

1.编写yaml文件----deployment与service一同创建

[root@k8s-master deployment]# vim tomcat-deploy.yaml

[root@k8s-master deployment]# cat tomcat-deploy.yaml 
apiVersion: apps/v1
kind: Deployment
metadata:
  name: tomcat
  namespace: default
spec:
  selector:
    matchLabels:
      app: tomcat
  replicas: 2
  template:
    metadata:
      labels:
        app: tomcat
    spec:
      containers:
      - name: tomcat
        image: daocloud.io/library/tomcat:7.0.76-alpine
        imagePullPolicy: IfNotPresent
        ports:
        - containerPort: 8080
---
apiVersion: v1
kind: Service
metadata:
  name: my-tomcat
spec:
  type: NodePort
  ports:
    - nodePort: 31000                   #是有一个范围,在30000~32457之间
      port: 8081                     #ClusterIP的端⼝,8080端口上述nginx已使用   
      targetPort: 8080
  selector:
    app: tomcat

2.应用并查看

[root@k8s-master deployment]# kubectl apply -f tomcat-deploy.yaml 
deployment.apps/tomcat created
service/my-tomcat created

[root@k8s-master ~]# kubectl get svc
NAME         TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)          AGE
kubernetes   ClusterIP   10.96.0.1       <none>        443/TCP          9d
my-service   NodePort    10.111.86.105   <none>        8080:30005/TCP   39m
my-tomcat    NodePort    10.105.150.1    <none>        8081:31000/TCP   7s
[root@k8s-master ~]# kubectl get endpoints
NAME         ENDPOINTS                           AGE
kubernetes   192.168.22.139:6443                 9d
my-service   10.244.1.33:80,10.244.2.29:80       40m
my-tomcat    10.244.2.25:8080,10.244.2.31:8080   61s

3.打开浏览器输入node节点IP:端口测试

端口详解

1. nodePort
        nodePort是 kubernetes 提供给集群外部客户访问 service ⼊⼝的⼀种⽅式(另⼀种⽅式是 LoadBalancer),所以, <nodeIP>:nodePort 是提供给集群外部客户访问 service 的⼊⼝;
2.port
         这⾥的 port 表示: service 暴露在 cluster ip 上的端⼝, cluster ip:port 是提供给集群内部 客户访问 service 的⼊⼝;
3.targetPort

         targetPort很好理解,targetPortpod上的端⼝,从portnodePort上到来的数据最终经过kube-proxy流⼊到后端podtargetPort上进⼊容器;

kube-proxy反向代理

         kube-proxy与iptables
        当service有了port和nodePort之后,就可以对内/外提供服务。那么其具体是通过什么原理来实现的呢?原因就在kube-proxy在本地node上创建的iptables/ipvsadm规则;
        Kube-Proxy 通过配置 DNAT 规则(从容器出来的访问,从本地主机出来的访问两⽅⾯),将到这个服 务地址的访问映射到本地的kube-proxy端⼝(随机端⼝);然后  Kube-Proxy 会监听在本地的对应端⼝,将到这个端⼝的访问给代理到远端真实的 pod 地址上去;
         不管是通过集群内部服务⼊⼝:port还是通过集群外部服务⼊⼝:nodePort的请求都将重定向到本地kube- proxy端⼝(随机端⼝)的映射,然后将到这个kube-proxy端⼝的访问给代理到远端真实的  pod 地址上 去;
  • 27
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值