网站建设报价单模板下载,贵州省住房和城乡建设官方网站,网站建设 设计创意,个人网站建设课程介绍一#xff0c;Ingress介绍
Ingress是k8s中一种重要的资源对象#xff0c;它主要用于定义从集群外部到集群内部服务的HTTP(S)路由规则。用于管理代理 Ingress-Controller的配置文件。
kubectl explain ingress二#xff0c;Ingress-Controller介绍
Ingress Controller 是 …一Ingress介绍
Ingress是k8s中一种重要的资源对象它主要用于定义从集群外部到集群内部服务的HTTP(S)路由规则。用于管理代理 Ingress-Controller的配置文件。
kubectl explain ingress二Ingress-Controller介绍
Ingress Controller 是 Kubernetes 集群中的一个组件是一个七层的负载均衡调度器它负责实现 Ingress 资源对象中定义的路由规则。
Ingress Controller 的具体实现可以多种多样包括但不限于 Nginx、HAProxy、Traefik、Istio 等。每种 Ingress Controller 都有其独特的特性和优势但它们的共同目标都是根据 Ingress 资源中的定义来管理外部到集群内部服务的 HTTP(S) 流量。
三Ingress和Ingress Controller
1共同作用
Ingress Controller结合Ingress 定义的规则生成配置然后动态更新ingress-controller里的Nginx 或者trafik负载均衡器并刷新使配置生效来达到服务自动发现的作用。 Ingress 则是定义规则通过它定义某个域名的请求过来之后转发到集群中指定的 Service。它可以通过 Yaml 文件定义可以给一个或多个 Service 定义一个或多个 Ingress 规则。
2使用Ingress Controller代理步骤
1部署Ingress controller以nginx为例部署。 2创建Pod应用可以通过控制器DeploymentStatefulset等创建pod。 3创建Service用selector来分组pod。 4创建Ingress http/https测试通过 http/https 访问应用。
四高可用
根据Deployment nodeSeletorpod反亲和性方式部署在k8s指定的两个work节点然后通过keepalivenginx实现nginx-ingress-controller高可用框架如下图所示。
1安装ingress-controller
下载镜像及yaml文件安装ingress-nginx-controller.v1.1.1.tar.gz
# 安装
kubectl apply -f ingress-deploy.yaml【如果报错】 【解决办法】
执行一下命令然后再次尝试创建内容
kubectl delete -A ValidatingWebhookConfiguration ingress-nginx-admission至此两个ingress-controller的pod由于采用反亲和性分别部署到两个节点上。
2安装 配置keeplivednginx
实现前端虚拟IPVIP两节点node机器上相互“漂移”。
1两台node节点分别安装
yum install epel-release nginx keepalived nginx-mod-stream -y2更改nginx.conf
# cat /etc/nginx/nginx.confuser nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;include /usr/share/nginx/modules/*.conf;events {worker_connections 1024;
}# 增加一下内容为两台apiserver组件提供负载均衡
stream {log_format main $remote_addr $upstream_addr - [$time_local] $status $upstream_bytes_sent;access_log /var/log/nginx/k8s-access.log main;upstream k8s-ingress-controller {server 192.168.40.181:80 weight5 max_fails3 fail_timeout30s; # node1的IP:PORTserver 192.168.40.182:80 weight5 max_fails3 fail_timeout30s; # node2 的IP:PORT}server {listen 30080; # 该监听端口需要大于30000-32000左右proxy_pass k8s-ingress-controller;}
}http {log_format main $remote_addr - $remote_user [$time_local] $request $status $body_bytes_sent $http_referer $http_user_agent $http_x_forwarded_for;access_log /var/log/nginx/access.log main;sendfile on;tcp_nopush on;tcp_nodelay on;keepalive_timeout 65;types_hash_max_size 2048;include /etc/nginx/mime.types;default_type application/octet-stream;}【备注】
server 反向服务地址和端口weight 主机权重max_fails 最大失败次数达到该数值则认为主机已挂掉踢出fail_timeout 踢出后重新探测时间nginx监听端口变成大于30000的端口才能代理ingress-controller。比方说30080,问域名:30080
3keepalive配置
主节点 和 备节点服务器的配置不同。
# cat /etc/keepalived/keepalived.conf global_defs { notification_email { acassenfirewall.loc failoverfirewall.loc sysadminfirewall.loc } notification_email_from Alexandre.Cassenfirewall.loc smtp_server 127.0.0.1 smtp_connect_timeout 30 router_id NGINX_MASTER
} vrrp_script check_nginx {script /etc/keepalived/check_nginx.sh
}vrrp_instance VI_1 { state MASTER interface ens33 # 修改为实际网卡名virtual_router_id 51 # VRRP 路由 ID实例每个实例是唯一的 priority 100 # 优先级备服务器设置 90 advert_int 1 # 指定VRRP 心跳包通告间隔时间默认1秒 authentication { auth_type PASS auth_pass 1111 } # 虚拟IPvirtual_ipaddress { 192.168.40.199/24 # 该网段需和物理机ip为同一个网段} track_script {check_nginx}
}【注意】
vrrp_script指定检查nginx工作状态脚本根据nginx状态判断是否故障转移virtual_ipaddress 虚拟IPVIP192.168.40.199/24 # 该网段需和物理机ip为同一个网段该ip地址不能被占用需要ping一下查看
【主/备配置参数区别】
主服务node01备服务node02stateMASTERBACKUPpriority10090 4配置检测脚本check_nginx.sh
# cat check_nginx.sh#!/bin/bash
#1、判断Nginx是否存活
counter$(ps -ef |grep nginx | grep sbin | egrep -cv grep|$$ )
if [ $counter -eq 0 ]; then#2、如果不存活则尝试启动Nginxservice nginx startsleep 2#3、等待2秒后再次获取一次Nginx状态counter$(ps -ef |grep nginx | grep sbin | egrep -cv grep|$$ )#4、再次进行判断如Nginx还不存活则停止Keepalived让地址进行漂移if [ $counter -eq 0 ]; thenservice keepalived stopfi
fi添加授权拥有可执行权限chmod x check_nginx.sh。
5两台node主机节点按顺序依次启动
systemctl daemon-reload
systemctl enable nginx keepalived
systemctl start nginx
systemctl start keepalived6测试vip是否绑定成功
查看vip绑定位置 通过停止keepalived看看vip的位置是否“漂移”
3控制器deploy创建pod及service
# cat ingress-service-pod.yamlapiVersion: v1
kind: Service
metadata:name: ingress-service # 创建service名称namespace: ingress-nginx # 指定命名空间labels:app: ingress-service # service自己标签
spec:selector: app: ingress-pod # service 筛选pod标签version: v1type: ClusterIPports:- port: 80 # service对外暴露的端口targetPort: 80 # 指定流量转发pod的目标端口
---
apiVersion: apps/v1
kind: Deployment
metadata:name: ingress-deploylabels: app: ingress-deploy-podversion: v1namespace: ingress-nginx
spec:replicas: 3revisionHistoryLimit: 8selector:matchLabels:app: ingress-podversion: v1strategy:rollingUpdate:maxSurge: 2maxUnavailable: 0template:metadata:labels:app: ingress-podversion: v1namespace: ingress-nginxspec:containers:- name: ingress-nginx-podimage: nginximagePullPolicy: IfNotPresentports:- name: web-portcontainerPort: 80protocol: TCPresources:requests:memory: 64Micpu: 250mlimits:memory: 128Micpu: 500m
4创建ingress
# cat ingress.yamlapiVersion: networking.k8s.io/v1
kind: Ingress
metadata: name: ingress-webnamespace: ingress-nginxlabels:app: ingress-webversion: v1
spec:ingressClassName: nginx rules:- host: mdy.ingressweb.com # 指定访问的域名http:paths:- backend:service:name: ingress-service # 指定之前创建service的名称port: number: 80 # 指定service的端口path: / # 指定访问的路径pathType: Prefix 5访问域名 http://mdy.ingressweb.com
本地主机host绑定
192.168.40.199 mdy.ingressweb.com6构建Ingress HTTPS代理访问
HTTPS域名访问需要购买证书测试本地自建证书即可
1创建并进入tls目录, 创建域名 mdy.ingressweb2.com证书
# cd /root/ingress/tlsopenssl genrsa -out tls-name.key 2048# 指定具体域名mdy.ingressweb2.com
openssl req -new -x509 -key tls-name.key -out tls-name.crt -subj /CCN/STBeijing/LBeijing/ODevOps/CNmdy.ingressweb2.com2根据域名证书创建生成secret
kubectl create secret tls ingress-secret --certtls-name.crt --keytls-name.key【注意】 kubectl create secret tls为生产工具tls为证书类型固定写法。
3基于上面生产的ingress.yaml更改配置
# cat ingress.yamlapiVersion: networking.k8s.io/v1
kind: Ingress
metadata:name: ingress-web-httpsnamespace: ingress-nginxlabels:app: ingress-webversion: v1
spec:ingressClassName: nginxtls: # 定义证书- hosts: # 定义hosts- mdy.ingressweb2.com # 指定域名已被证书签发secretName: ingress-secretrules:- host: mdy.ingressweb2.comhttp:paths:- backend:service:name: ingress-serviceport:number: 80path: /pathType: Prefix 4访问域名 https://mdy.ingressweb2.com
本地主机host绑定
192.168.40.199 mdy.ingressweb2.com