kubernetes进阶之路(十)~~~Service系列之LoadBalance

本文通过实战案例,详细介绍了如何在Kubernetes(K8S)集群中利用Ingress资源对象,结合Nginx Ingress Controller,实现对外部HTTP请求的负载均衡、SSL终止及基于名称的虚拟主机托管。通过部署Tomcat服务并创建Ingress规则,成功实现了从外部访问集群内部服务。

4 Service-LoadBalance

通常需要第三方云提供商支持,有约束性

Ingress

官网https://kubernetes.io/docs/concepts/services-networking/ingress/

GitHub Ingress Nginx:https://github.com/kubernetes/ingress-nginx

Nginx Ingress Controller:<https://kubernetes.github.io/ingress-nginx/

An API object that manages external access to the services in a cluster, typically HTTP.
Ingress can provide load balancing, SSL termination and name-based virtual hosting.

Ingress exposes HTTP and HTTPS routes from outside the cluster to services within the cluster. Traffic routing is controlled by rules defined on the Ingress resource.

    internet
        |
   [ Ingress ]
   --|-----|--
   [ Services ]

可以发现,Ingress就是帮助我们访问集群内的服务的。为了彰显其优势,我们在使用Ingress之前,先以一个简单案例出发。

4.1使用NodePort类型的service在K8S集群中部署tomcat

(也为了演示将service写在yaml文件中)

浏览器想要访问这个tomcat,也就是外部要访问该tomcat,用之前的Service-NodePort的方式是可以的,比如暴露一个端口,只需要访问 :即可。

01 创建yaml文件

vim my-tomcat.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: tomcat-deployment
  labels:
    app: tomcat
spec:
  replicas: 1
  selector:
    matchLabels:
      app: tomcat
  template:
    metadata:
      labels:
        app: tomcat
    spec:
      containers:
      - name: tomcat
        image: tomcat
        ports:
        - containerPort: 8080
---
apiVersion: v1
kind: Service
metadata:
  name: tomcat-
### KubernetesService 网络的概念 #### 一、Service 的基本概念 在 Kubernetes 中,Pod 是最小的部署单元,但 Pod 的 IP 地址不是固定的,在重启或重新调度之后会改变。为了能够稳定地访问一组 Pod 提供的服务,Kubernetes 引入了 **Service** 资源对象[^3]。 Service 定义了一组逻辑上的 Pod 列表以及访问这组 Pod 的策略。通过 Service 可以为应用程序提供稳定的网络端点,即使背后的 Pod 发生变化也不会影响到外部调用者。 #### 二、Service 类型和服务发现机制 Kubernetes 支持多种类型的 Service: - `ClusterIP` (默认): 创建一个仅能在集群内部访问的虚拟 IP; - `NodePort`: 在每个节点上开放指定端口,并将其流量转发至 ClusterIP 上面去; - `LoadBalancer`: 使用云提供商创建真正的负载均衡器并将请求路由到服务; - `ExternalName`: 返回 CNAME 和对应值,通常用于指向外部服务地址; 对于服务间的通信而言,Kubernetes 实现了一个强大的 DNS 基础设施,允许容器之间通过简单的域名解析来进行互相查找和连接[^1]。 #### 三、配置示例 下面是一个简单例子展示如何定义一个名为 "my-service" 的 Service 来暴露运行 Web 应用程序的一系列 Pods: ```yaml apiVersion: v1 kind: Service metadata: name: my-service spec: selector: app: MyApp ports: - protocol: TCP port: 80 targetPort: 9376 ``` 此 YAML 文件指定了要匹配带有标签 `app=MyApp` 的所有 Pod 并将来自客户端发送到该 Service 的第 80 端口的数据包重定向到目标 Pod 的第 9376 端口上去处理[^4]。
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值