0
点赞
收藏
分享

微信扫一扫

K8S之Ingress


文章目录

  • ​​一、概念​​
  • ​​`1.1.NodePort存在的不足`​​
  • ​​`1.2.Ingress`​​
  • ​​二、部署Ingress Controller(全局的负载均衡)​​
  • ​​`2.1.Ingress Contronler工作原理`​​
  • ​​`2.2.下载yaml文件`​​
  • ​​`2.3.下载镜像`​​
  • ​​`2.4.修改mandatory.yaml`​​
  • ​​三、基于HTTP的Ingress规则​​
  • ​​`3.1.yaml文件`​​
  • ​​`3.2.访问域名`​​
  • ​​四、基于HTTPS的Ingress规则​​
  • ​​`4.1.生成自签证书`​​
  • ​​`4.2.创建secret`​​
  • ​​`4.3.Ingress规则`​​

参考视频:https://ke.qq.com/user/index/index.html#/plan/cid=1709963&term_id=102815140

一、概念

​1.1.NodePort存在的不足​

一个端口只能关联一个服务,端口需提前规划
只支持4层负载均衡(NodeIP+Port)

​1.2.Ingress​

Ingress 公开了从集群外部到集群内服务的HTTP和HTTPS路由。流量路由由Ingress资源上定义的规则控制。

关联Service

通过Ingress Controller实现Pod的负载均衡

支持TCP/UDP 4层和HTTP 7层
K8S之Ingress_负载均衡

二、部署Ingress Controller(全局的负载均衡)

​2.1.Ingress Contronler工作原理​

Ingress Contronler通过与 Kubernetes API 交互,动态感知集群中 Ingress 规则变化,然后读取它,根据Ingress规则生成一段 Nginx 配置,应用到管理的Nginx服务,然后热加载生效。
以此来达到Nginx负载均衡器配置及动态更新的问题。

数据包流程:客户端 ->Ingress Controller(nginx) ->ServiceName:Port ->分布在各节点Pod

​2.2.下载yaml文件​

地址:https://github.com/kubernetes/ingress-nginx/tree/nginx-0.30.0
K8S之Ingress_负载均衡_02

​2.3.下载镜像​

docker pull siriuszg/nginx-ingress-controller:0.30.0

​2.4.修改mandatory.yaml​

使用宿主机网络,添加hostNetwork: true
镜像修改为上一步下载的镜像

K8S之Ingress_工作原理_03
kubectl apply -f mandatory.yaml

正常会监听宿主机的80和443端口
K8S之Ingress_kubernetes_04

三、基于HTTP的Ingress规则

​3.1.yaml文件​

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: ingress
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
rules:
- host: foo.bar.com
http:
paths:
- backend:
serviceName: web
servicePort: 80

解释

host: foo.bar.com     #访问Ingress的域名
serviceName: web #管理服务名为web的Service
servicePort: 80 #Service监听的端口为80,通过kubectl get svc查看

kubectl apply -f ingress.yaml
kubectl get ing
K8S之Ingress_kubernetes_05

​3.2.访问域名​

查看nginx-ingress-controller部署到哪个节点上

kubectl get pod -o wide -ningress-nginx

nginx-ingress-controller部署到了192.168.1.10节点上
K8S之Ingress_负载均衡_06
由于foo.bar.com是临时起的,需要写域名解析到hosts文件

echo "192.168.1.10 foo.bar.com" >> /etc/hosts
curl foo.bar.com

K8S之Ingress_负载均衡_07

四、基于HTTPS的Ingress规则

​4.1.生成自签证书​

openssl genrsa > cert.key
openssl req -new -x509 -key cert.key -subj "/CN=common" >cert.pe

​4.2.创建secret​

kubectl create secret tls foo-bar-com --cert=cert.pem --key=cert.key
kubectl get secrets

K8S之Ingress_kubernetes_08

​4.3.Ingress规则​

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: tls-example-ingress
spec:
tls:
- hosts:
- foo.bar.com
secretName: foo-bar-com
rules:
- host: foo.bar.com
http:
paths:
- path: /
backend:
serviceName: web
servicePort: 80

kubectl apply -f ingress-https.yaml
K8S之Ingress_负载均衡_09
K8S之Ingress_负载均衡_10


举报

相关推荐

0 条评论