Ingress是从Kubernetes集群外部访问集群内部服务的入口。
实验来理解ingress
1. 创建两个deployment,并在每个deployment上创建service
apiVersion: apps/v1
kind: Deployment
metadata:
name: hello-server
spec:
replicas: 2
selector:
matchLabels:
app: hello-server
template:
metadata:
labels:
app: hello-server
spec:
containers:
- name: hello-server
image: nginx
---
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: nginx-demo
name: nginx-demo
spec:
replicas: 2
selector:
matchLabels:
app: nginx-demo
template:
metadata:
labels:
app: nginx-demo
spec:
containers:
- image: nginx
name: nginx
---
apiVersion: v1
kind: Service
metadata:
labels:
app: nginx-demo
name: nginx-demo
spec:
selector:
app: nginx-demo
ports:
- port: 8000
protocol: TCP
targetPort: 80
---
apiVersion: v1
kind: Service
metadata:
labels:
app: hello-server
name: hello-server
spec:
selector:
app: hello-server
ports:
- port: 8000
protocol: TCP
targetPort: 80
在master节点上,执行 kubectl apply -f create-nginx-service.yaml # 上面的yaml内存保存为文件create-nginx-service.yaml
2. 修改 hello-server
因为刚才我们在部署的过程中,用了同一个nginx镜像,为了实验上能看到效果,我们修改hello-server服务对应的pod中nginx的内容。
这样hello-server服务对应的nginx中index.html内容与nginx-demo服务对应的nginx内容已经不同了。
3. 给ingress添加规则,根据域名,访问不同的serivce
apiVersion: networking.k8s.io/v1 #v1 1.19+
kind: Ingress
metadata:
name: ingress-host-bar
spec:
ingressClassName: nginx
rules:
- host: "hello.service.com"
http:
paths:
- pathType: Prefix
path: "/"
backend:
service:
name: hello-server
port:
number: 8000
- host: "demo.service.com"
http:
paths:
- pathType: Prefix
path: "/" # 把请求会转给下面的服务,下面的服务一定要能处理这个路径,不能处理就是404
backend:
service:
name: nginx-demo ## java,比如使用路径重写,去掉前缀nginx
port:
number: 8000