官方文档传送门 https://kubernetes.io/zh/docs/concepts/services-networking/ingress/
Ingress 公开了从集群外部到集群内服务的 HTTP 和 HTTPS 路由。 流量路由由 Ingress 资源上定义的规则控制。下面是一个将所有流量都发送到同一 Service 的简单 Ingress 示例:
分为两步, - 部署Ingress Controller - 创建Ingress规则
@ 部署Ingress Controller 以ingress-nginx为例? https://github.com/kubernetes/ingress-nginx
Contents中选择?Bare-metal
?
kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.0.0/deploy/static/provider/baremetal/deploy.yaml
先不执行示例的命令,wget这个url 将Ingress Controller暴露 ->?使用宿主机网络 hostNetwork: true
apiVersion: apps/v1
kind: DaemonSet
metadata:
……
spec:
……
template:
metadata:
……
spec:
hostNetwork: true
……
?kubectl apply -f deploy.yaml部署 Ingress控制器
将daemonset的pod所在的节点加到本机的hosts文件,如C:\Windows\System32\drivers\etc\hosts
[root@k8s-master ~]# kubectl get pod -o wide -n ingress-nginx
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
nginx-ingress-controller-587n7 1/1 Running 9 8d 192.168.231.123 k8s-node2 <none> <none>
nginx-ingress-controller-8qvv2 1/1 Running 10 8d 192.168.231.122 k8s-node1 <none> <none>
[root@k8s-master ~]#
C:\Windows\System32\drivers\etc\hosts添加如下行
192.168.231.122 web.test.cn
192.168.231.123 web.test.cn
@ 创建Ingress规则 test-ingress.yaml内容如下
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: test-web
spec:
rules:
- host: web.test.cn
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: web-service
port:
number: 80
说明:其中绑定的web-service是一个已创建的SVC
[root@k8s-master ~]# kubectl get svc
NAME ? ? ? ? ?TYPE ? ? ? ?CLUSTER-IP ? ? EXTERNAL-IP ? PORT(S) ? ? ? ?AGE
kubernetes ? ?ClusterIP ? 10.96.0.1 ? ? ?<none> ? ? ? ?443/TCP ? ? ? ?38d
web-service ? NodePort ? ?10.96.92.10 ? ?<none> ? ? ? ?80:30976/TCP ? 44h
[root@k8s-master ~]#
创建ingress,然后使用HOSTS的域名可以打开网页
[root@k8s-master ~]# kubectl apply -f test-ingress.yaml
ingress.networking.k8s.io/test-web created
[root@k8s-master ~]# kubectl get ingress
NAME CLASS HOSTS ADDRESS PORTS AGE
test-web <none> web.test.cn 80 6s
[root@k8s-master ~]#
与NodePort相比,实现了7层负载均衡
?
|