一、爲什麼需要Ingress
一個重要的原因是每個LoadBalancer服務都需要自己的負載均衡器,以及獨有的公有IP地址,而Ingress只需要一個公網IP就能爲許多服務提供訪問。當客戶端向Ingress發送HTTP請求時,Ingress會根據請求的主機名和路徑決定請求轉發到服務。
二、創建一個簡單的Ingress服務
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: nginx
namespace: test
spec:
rules:
- host: mingkang-web.cedarhd.com #ingress將域名mingkang-web映射到你的服務
http:
paths:
- backend:
serviceName: nginx-svc #將所有的請求發送到nginx-svc服務的80端口
servicePort: 80
[root@test-nodes1 k8s-yaml-file]# kubectl get pod -o wide -n test
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
nginx 1/1 Running 0 6d22h 172.7.21.6 test-nodes1.cedarhd.com <none> <none>
[root@test-nodes1 k8s-yaml-file]# kubectl get svc -n test
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
nginx-svc ClusterIP 192.168.222.228 <none> 80/TCP 22m
[root@test-nodes1 k8s-yaml-file]# ipvsadm -ln | grep 192.168.222.228 -C 2
TCP 192.168.212.130:8080 nq
-> 172.7.21.6:80 Masq 1 0 0
TCP 192.168.222.228:80 nq
-> 172.7.21.6:80 Masq 1 0 0
TCP 192.168.237.252:8080 nq
[root@test-nodes1 k8s-yaml-file]# kubectl get ingress -n test
NAME HOSTS ADDRESS PORTS AGE
nginx mingkang-web.cedarhd.com 80 16m
三、通過相同的Ingress暴露多個服務
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: nginx
namespace: test
spec:
rules:
- host: mingkang-web.cedarhd.com #ingress將域名mingkang-web映射到你的服務
http:
paths:
- path: /abc
backend:
serviceName: nginx-svc #將mingkang-web.cedarhd.com/abc的請求將會轉發至ngins-svc服務
servicePort: 80
- path: /def
backend:
serviceName: nginx-dd #將mingkang-web.cedarhd.com/def的請求將會轉發至nginx-dd服務
servicePort: 81