【Kubernetes实战】(十六)Service 对外提供访问相关命令

一、环境安装

参考

【Kubernetes实战】(四)MiniKube方式部署

【Kubernetes实战】(五)KubeAdm方式部署

【Kubernetes实战】(六)Kind方式部署

二、Service介绍

          Kubernetes Pod 是有生命周期的,它们可以被创建,也可以被销毁,然而一旦被销毁生命就永远结束。 通过 ReplicationController 能够动态地创建和销毁 Pod(例如,需要进行扩缩容,或者执行 滚动升级)。 每个 Pod 都会获取它自己的 IP 地址,即使这些 IP 地址不总是稳定可依赖的。 这会导致一个问题:在 Kubernetes 集群中,如果一组 Pod(称为 backend)为其它 Pod (称为 frontend)提供服务,那么那些 frontend 该如何发现,并连接到这组 Pod 中的哪些 backend 呢?

       Kubernetes Service 定义了这样一种抽象:一个 Pod 的逻辑分组,一种可以访问它们的策略 —— 通常称为微服务。 这一组 Pod 能够被 Service 访问到,通常是通过 Label Selector实现的。Service 通过标签来选取服务后端,一般配合 Replication Controller 或者 Deployment 来保证后端容器的正常运行。这些匹配标签的 Pod IP 和端口列表组成 endpoints,由 kube-proxy 负责将服务 IP 负载均衡到这些 endpoints 上。

Service默认只支持4层负载均衡能力,没有7层功能。(7层可以通过Ingress实现)


三、Service的类型


• ClusterIP:默认值,k8s系统给service自动分配的虚拟IP,只能在集群内部访问。


• NodePort:在ClusterIP基础上,将Service通过指定的Node上的端口暴露给外部,访问任意一个 NodeIP:nodePort都将路由到ClusterIP。


• LoadBalancer:在 NodePort 的基础上,借助 cloud provider 创建一个外部的负载均衡器,并将请求转发到 :NodePort

此模式只能在云服务器上使用(收费的)。


• ExternalName:将服务通过 DNS CNAME 记录方式转发到指定的域名(通过 spec.externlName 设定)。(很少用)

四、Service使用

1 ClusterIP类型

1)vim svc.yml

apiVersion: v1
kind: Service
metadata:
  labels:                          
    app: web
  name: nginx-svc
  namespace: dev
spec:
  ports:
  - name: http
    port: 3001                      # service暴露的端口
    protocol: TCP
    targetPort: 80                  #后端容器的端口
  selector:                       #标签选择器与deployment一致
    app: web                 
  type: ClusterIP
---

apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: web
  name: deployment-nginx
  namespace: dev
spec:
  replicas: 2         # replicas至少要2个以上,否则 后面进容器内无法访问svc
  selector:
    matchLabels:
      app: web
  template:
    metadata:
      labels:
        app: web
    spec:
      containers:
      - image: nginx:1.21.4
        name: nginx
        ports:
        - name: http
          containerPort: 80       #容器端口

2)创建svc 和 deploy

kubectl apply -f svc.yml

3)查看deploy、svc、pod

kubectl get svc -n dev -o wide

kubectl get deploy -n dev -o wide

kubectl get po -n dev -o wide

4)测试访问

进入其中一个po中容器

kubectl exec -it deployment-nginx-7c64d47847-8tspg bash -n dev

通过 curl http://10.96.243.3:3001  或 curl http://nginx-svc:3001 都可以访问成功。其中nginx-svc为service name

 

也可以查看容器的日志

kubectl logs -f  deployment-nginx-7c64d47847-8tspg

ClusterIp类型默认只能内部访问,不能外部访问。也可以用 port-forward 实现临时转发访问

kubectl port-forward sevice/nginx-svc 81:3001

转发后,启用新ssh终端访问

curl http://127.0.0.1:81

2 NodePort类型

vim svc.yml

apiVersion: v1
kind: Service
metadata:
  labels:
    app: web
  name: nginx-svc
  namespace: dev
spec:
  ports:
  - name: http
    port: 3001     
    protocol: TCP
    targetPort: 80
    nodePort: 31000   #30000 - 32767
  selector:
    app: web
  type: NodePort
---

apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: web
  name: deployment-nginx
  namespace: dev
spec:
  replicas: 3
  selector:
    matchLabels:
      app: web
  template:
    metadata:
      labels:
        app: web
    spec:
      containers:
      - image: nginx:1.21.4
        name: nginx
        ports:
        - name: http
          containerPort: 80

使配置生效

kubectl apply -f svc.yml

获取svc

kubectl  get svc -n dev

 

外部浏览器打开访问:

Ip : 31000

3 LoadBalancer类型

收费的,后续待补充

ExternalName

很少用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

forest_long

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值