K8s ingress controller

吴书松
吴书松
发布于 2025-09-14 / 11 阅读
1
0

K8s ingress controller

1、ingress组件介绍

官方给的原话是:
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.

也就是说,ingress实际作用相当于一个网关,通过配置一定的规则(包括基于域名的流量转发、负载均衡规则……)实现流量在进入集群之后,通过ingress发到指定的服务。

2、k8s 对外暴露服务的方式

k8s是通过pod + service的方式提供服务的。pod跑在Container Runtimes当中

在我们创建pods或者service后,也就是相关服务的容器之后,这时容器会创建我们在初始化k8s服务时分配的内部网段:podSubnet: 10.244.0.0/16 serviceSubnet: 10.96.0.0/12此时外部无法访问

而当我们服务需要对外暴露时,一般会有两种方式:

  • NodePort :通过node(节点)IP + 端口的方式提供,相当于将服务直接绑定在本机/从属机的端口上

  • ingress 利用组件实现流量的转发,并分发到各个服务上去。

3、NodePort实践

NodePort是service组件提供的,相当于直接将服务绑定在本机的某个端口上。
这样的弊端是:

  1. 会直接占用本机的端口

  2. 如果节点的IP地址发生变化,需要进行处理。

不适合正式上线,但在开发和测试时,可以简单的暴露服务。

# 这里配置一个简单的nginx pods
# nginx.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: test
spec:
  replicas: 1
  selector:
    matchLabels:
      app: test
  template:
    metadata:
      labels:
        app: test
    spec:
      containers:
      - name: test
        image: nginx:alpine
        ports:
        - containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
  name: test
spec:
  type: NodePort # 这里选择使用nodeport模式
  ports:
  - port: 80
    targetPort: 80
    nodePort: 30273 # 暴露的端口只能选择30000-32767
  selector:
    app: test

接下来使用kubectl命令进行pod和service的创建kubectl create -f nginx.yaml
创建成功之后可以查看服务的运行情况kubectl get pods 以及kubectl get service.
运行成功如下:

此时,通过浏览器就可以访问到我们的服务。

4、ingress部署+使用

忽略,有其他篇幅介绍


评论