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组件提供的,相当于直接将服务绑定在本机的某个端口上。
这样的弊端是:
会直接占用本机的端口
如果节点的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部署+使用
忽略,有其他篇幅介绍