traefik Ingress https配置

2023-12-13 23:32
文章标签 配置 https ingress traefik

本文主要是介绍traefik Ingress https配置,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、概述

1、理解Ingress

简单的说,ingress就是从kubernetes集群外访问集群的入口,将用户的URL请求转发到不同的service上。Ingress相当于nginx、apache等负载均衡方向代理服务器,其中还包括规则定义,即URL的路由信息,路由信息得的刷新由 Ingress controller来提供。

2、理解Ingress Controller

Ingress Controller 实质上可以理解为是个监视器,Ingress Controller 通过不断地跟 kubernetes API 打交道,实时的感知后端 service、pod 等变化,比如新增和减少 pod,service 增加与减少等;当得到这些变化信息后,Ingress Controller 再结合下文的 Ingress 生成配置,然后更新反向代理负载均衡器,并刷新其配置,达到服务发现的作用。

3、RBAC

在开始之前,需要先了解一下什么是RBAC。RBAC(基于角色的访问控制)使用  rbac.authorization.k8s.io API 组来实现权限控制,RBAC 允许管理员通过 Kubernetes API 动态的配置权限策略。在 1.6 版本中 RBAC 还处于 Beat 阶段,如果想要开启 RBAC 授权模式需要在 apiserver 组件中指定 --authorization-mode=RBAC 选项。

在 RBAC API 的四个重要概念: 

Role:是一系列的权限的集合,例如一个角色可以包含读取 Pod 的权限和列出 Pod 的权限 
ClusterRole: 跟 Role 类似,但是可以在集群中到处使用( Role 是 namespace 一级的) 
RoloBinding:把角色映射到用户,从而让这些用户继承角色在 namespace 中的权限。 
ClusterRoleBinding: 让用户继承 ClusterRole 在整个集群中的权限。

 

二、部署traefik

环境介绍

系统k8s版本dockerip主机名配置
centos 7.61.18.119.03.510.212.20.94k8s-master2核4G
centos 7.61.18.119.03.510.212.20.240k8s-node012核8G

 

 

 

 

 

 

traefik版本

traefik目前主要有2个版本,分别是1.x和2.x。因为2个版本之间,配置文件差异比较大,目前网络上的博客文章都是基于1.x编写的。

因此,本文采用1.x最后一个版本,镜像名为:traefik:v1.7.24-alpine

 

配置证书

https证书,是从阿里云购买的,买的通配符证书,1年1千多块钱左右。

登录master节点,创建证书目录。

mkdir /etc/kubernetes/ssl

将证书上传到此目录,并重命名文件。

目录结构如下:

./
├── tls.crt
└── tls.key

 

创建secret

创建secret,保存https证书,注意操作目录,如果不是在此目录下操作,须指定绝对路径。

cd /etc/kubernetes/ssl
kubectl create secret generic ssl --from-file=tls.crt --from-file=tls.key -n kube-system

如果需要配置traefik多域名证书形式,traefik能够自动识别证书。请参考文章底部提供的参考链接!

 

打label标签

为 k8s-node01 节点指定label标签为edgenode=true

kubectl label nodes k8s-node01 edgenode=true

 

配置yaml

traefik.yaml

这里面包含了rbac,DaemonSet,controller,traefik UI,https配置,configmap

---
kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:name: traefik-ingress-controller
rules:- apiGroups:- ""resources:- services- endpoints- secretsverbs:- get- list- watch- apiGroups:- extensionsresources:- ingressesverbs:- get- list- watch
---
kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:name: traefik-ingress-controller
roleRef:apiGroup: rbac.authorization.k8s.iokind: ClusterRolename: traefik-ingress-controller
subjects:
- kind: ServiceAccountname: traefik-ingress-controllernamespace: kube-system
---
apiVersion: v1
kind: ServiceAccount
metadata:name: traefik-ingress-controllernamespace: kube-system
---
kind: ConfigMap
apiVersion: v1
metadata:name: traefik-confnamespace: kube-system
data:traefik.toml: |insecureSkipVerify = truedefaultEntryPoints = ["http","https"][entryPoints][entryPoints.http]address = ":80"[entryPoints.https]address = ":443"[entryPoints.https.tls][[entryPoints.https.tls.certificates]]CertFile = "/ssl/tls.crt"KeyFile = "/ssl/tls.key"
---
kind: DaemonSet
apiVersion: apps/v1
metadata:name: traefik-ingress-controllernamespace: kube-systemlabels:k8s-app: traefik-ingress-lb
spec:selector:matchLabels:k8s-app: traefik-ingress-lbname: traefik-ingress-lbtemplate:metadata:labels:k8s-app: traefik-ingress-lbname: traefik-ingress-lbspec:serviceAccountName: traefik-ingress-controllertolerations:- key: node-role.kubernetes.io/mastereffect: NoScheduleterminationGracePeriodSeconds: 60hostNetwork: true#nodeSelector:#   ingress: traefikvolumes:- name: sslsecret:secretName: ssl- name: configconfigMap:name: traefik-confcontainers:- image: traefik:v1.7.24-alpinename: traefik-ingress-lbports:- name: httpcontainerPort: 80hostPort: 80- name: admincontainerPort: 8080securityContext:privileged: trueargs:- --configfile=/config/traefik.toml- -d- --web- --kubernetesvolumeMounts:- mountPath: "/ssl"name: "ssl"- mountPath: "/config"name: "config"nodeSelector:edgenode: "true"
---
kind: Service
apiVersion: v1
metadata:name: traefik-ingress-service
spec:selector:k8s-app: traefik-ingress-lbports:- protocol: TCPport: 80name: web- protocol: TCPport: 8080name: admin- protocol: TCPport: 443name: httpstype: NodePort
---
apiVersion: v1
kind: Service
metadata:name: traefik-web-uinamespace: kube-system
spec:selector:k8s-app: traefik-ingress-lbports:- port: 80targetPort: 8080
---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:name: traefik-web-uinamespace: kube-systemannotations:kubernetes.io/ingress.class: traefik
spec:rules:- host: traefikui.test.comhttp:paths:- backend:serviceName: traefik-web-uiservicePort: 80
View Code

 

使用DaemonSet类型来部署Traefik,并使用nodeSelector来限定Traefik所部署的主机。如果有dns,将域名解析到这所部署的主机即可。

 

开始部署

kubectl apply -f traefik.yaml

 

访问traefik ui

由于内网没有dns服务器,直接修改windows10的hosts文件,添加一条记录。

10.212.20.240  traefikui.test.com

注意:这里的10.212.20.240是Traefik所部署的主机。不是master节点ip

 

访问http和https

http://traefikui.test.com
https://traefikui.test.com

效果如下:

 

 

三、traefik发布应用

现在k8s环境中,有一个vue开发的web后台。

查看pod

# kubectl get pods -n test
NAME                           READY   STATUS    RESTARTS   AGE
web-wxbweb-845994566c-4dcxt    1/1     Running   2          2d23h

查看svc

# kubectl get svc -n test
NAME         TYPE        CLUSTER-IP    EXTERNAL-IP   PORT(S)             AGE
web-wxbweb   ClusterIP   10.1.43.224   <none>        7000/TCP,7001/TCP   2d23h

目前的service类型是ClusterIP

 

新建一个yaml,通过traefik来暴露访问。

wxbweb-traefik.yaml

kind: Ingress
metadata:name: web-wxbwebnamespace: testannotations:kubernetes.io/ingress.class: traefiktraefik.frontend.rule.type: PathPrefixStrip
spec:rules:- host: wxbweb.test.comhttp:paths:- path: /backend:serviceName: web-wxbwebservicePort: 7000

 

发布一下

kubectl apply -f wxbweb-traefik.yaml

 

新增一条hosts记录

10.212.20.240  wxbweb.test.com

 

访问页面是否正常。

 

 

2.0配置,请参考

https://docs.traefik.io/user-guides/crd-acme/

 

本文参考链接:

https://www.cnblogs.com/cptao/p/10911918.html

 

这篇关于traefik Ingress https配置的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/490341

相关文章

SQL Server配置管理器无法打开的四种解决方法

《SQLServer配置管理器无法打开的四种解决方法》本文总结了SQLServer配置管理器无法打开的四种解决方法,文中通过图文示例介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的... 目录方法一:桌面图标进入方法二:运行窗口进入检查版本号对照表php方法三:查找文件路径方法四:检查 S

Linux中SSH服务配置的全面指南

《Linux中SSH服务配置的全面指南》作为网络安全工程师,SSH(SecureShell)服务的安全配置是我们日常工作中不可忽视的重要环节,本文将从基础配置到高级安全加固,全面解析SSH服务的各项参... 目录概述基础配置详解端口与监听设置主机密钥配置认证机制强化禁用密码认证禁止root直接登录实现双因素

嵌入式数据库SQLite 3配置使用讲解

《嵌入式数据库SQLite3配置使用讲解》本文强调嵌入式项目中SQLite3数据库的重要性,因其零配置、轻量级、跨平台及事务处理特性,可保障数据溯源与责任明确,详细讲解安装配置、基础语法及SQLit... 目录0、惨痛教训1、SQLite3环境配置(1)、下载安装SQLite库(2)、解压下载的文件(3)、

Linux如何快速检查服务器的硬件配置和性能指标

《Linux如何快速检查服务器的硬件配置和性能指标》在运维和开发工作中,我们经常需要快速检查Linux服务器的硬件配置和性能指标,本文将以CentOS为例,介绍如何通过命令行快速获取这些关键信息,... 目录引言一、查询CPU核心数编程(几C?)1. 使用 nproc(最简单)2. 使用 lscpu(详细信

Nginx 重写与重定向配置方法

《Nginx重写与重定向配置方法》Nginx重写与重定向区别:重写修改路径(客户端无感知),重定向跳转新URL(客户端感知),try_files检查文件/目录存在性,return301直接返回永久重... 目录一.try_files指令二.return指令三.rewrite指令区分重写与重定向重写: 请求

Nginx 配置跨域的实现及常见问题解决

《Nginx配置跨域的实现及常见问题解决》本文主要介绍了Nginx配置跨域的实现及常见问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来... 目录1. 跨域1.1 同源策略1.2 跨域资源共享(CORS)2. Nginx 配置跨域的场景2.1

gitlab安装及邮箱配置和常用使用方式

《gitlab安装及邮箱配置和常用使用方式》:本文主要介绍gitlab安装及邮箱配置和常用使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1.安装GitLab2.配置GitLab邮件服务3.GitLab的账号注册邮箱验证及其分组4.gitlab分支和标签的

MySQL MCP 服务器安装配置最佳实践

《MySQLMCP服务器安装配置最佳实践》本文介绍MySQLMCP服务器的安装配置方法,本文结合实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下... 目录mysql MCP 服务器安装配置指南简介功能特点安装方法数据库配置使用MCP Inspector进行调试开发指

Redis Cluster模式配置

《RedisCluster模式配置》:本文主要介绍RedisCluster模式配置,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录分片 一、分片的本质与核心价值二、分片实现方案对比 ‌三、分片算法详解1. ‌范围分片(顺序分片)‌2. ‌哈希分片3. ‌虚

SpringBoot项目配置logback-spring.xml屏蔽特定路径的日志

《SpringBoot项目配置logback-spring.xml屏蔽特定路径的日志》在SpringBoot项目中,使用logback-spring.xml配置屏蔽特定路径的日志有两种常用方式,文中的... 目录方案一:基础配置(直接关闭目标路径日志)方案二:结合 Spring Profile 按环境屏蔽关