深入玩转K8S之如何访问业务应用(Traefik-ingress配置https篇)

上篇我们简单介绍了下traefik以及如何http访问, 但是在实际生产环境中不仅仅只是http的转发访问,还有https的转发访问,

前面一篇:traefik基础部署记录,介绍了最简单的http访问traefik,访问过程参考见下:

client --- (via http) ---> traefik ---- (via http) ---->  services

现在要实践的是更安全也更复杂的https访问traefik,有两种访问过程,参考见下:

后端service是普通http的
即client与traefik间采用https加密通信,但traefik与svc间则是明文的http通信

client --- (via https) ---> traefik ---- (via http) ---->  services

后端service是https的
即client与traefik间采用https加密通信,但traefik与svc也是采用https通信

client --- (via https) ---> traefik ---- (via https) ---->  services

下面我们来看看如何实现(伪)https,也就是上面说的第二种访问流程。

首先创建证书,想开启https,证书是少不了的。可以自己手动建一个证书,或者利用已经有的证书。这里我自己创建了一个ssl证书,具体创建流程可参考网上。

[[email protected] ~]# cd /opt/k8s/ssl
[[email protected] ssl]# ls
ssl.crt  ssl.csr  ssl.key

上面这个/opt/k8s/ssl目录是我创建的,路径可以随便只要和config文件里面的路径一致就行下面会说到。下面开始配置证书

[[email protected] ssl]# kubectl create secret generic traefik-cert --from-file=ssl.crt --from-file=ssl.key -n kube-system
secret "traefik-cert" created

创建一个configmap,保存traefix的配置。这里的traefix中配置了把所有http请求全部rewrite为https的规则,并配置相应的证书位置,同时我这里也创建了一个目录/opt/k8s/conf/。

[[email protected] conf]# cat traefik.toml 
defaultEntryPoints = ["http","https"]
[entryPoints]
  [entryPoints.http]
  address = ":80"
    [entryPoints.http.redirect]
    entryPoint = "https"
  [entryPoints.https]
  address = ":443"
    [entryPoints.https.tls]
      [[entryPoints.https.tls.certificates]]
      certFile = "/opt/k8s/ssl/ssl.crt"
      keyFile = "/opt/k8s/ssl/ssl.key"
 
[[email protected] config]# kubectl create configmap traefik-conf --from-file=traefik.toml -n kube-system
configmap "traefik-conf" created

由于之前配置的是http现在要换成https所以需要更新下Traefik,这里主要是更新下关联创建的secret和configMap,并挂载相对应的主机目录。

安全起见操作之前先备份下(职场好习惯)

[[email protected] k8s]# cp traefik-deployment.yaml traefik-deployment.yaml.bk
[[email protected] k8s]# cat traefik-deployment.yaml 
---
apiVersion: v1
kind: ServiceAccount
metadata:
  name: traefik-ingress-controller
  namespace: kube-system
---
kind: DaemonSet
apiVersion: extensions/v1beta1
metadata:
  name: traefik-ingress-controller
  namespace: kube-system
  labels:
    k8s-app: traefik-ingress-lb
spec:
  selector:
    matchLabels:
      k8s-app: traefik-ingress-lb
  template:
    metadata:
      labels:
        k8s-app: traefik-ingress-lb
        name: traefik-ingress-lb
    spec:
      serviceAccountName: traefik-ingress-controller
      terminationGracePeriodSeconds: 60
      hostNetwork: true
      volumes:
      - name: ssl
        secret:
          secretName: traefik-cert
      - name: config
        configMap:
          name: traefik-conf
      containers:
      - image: traefik
        name: traefik-ingress-lb
        volumeMounts:
        - mountPath: "/opt/k8s/ssl/"
          name: "ssl"
        - mountPath: "/opt/k8s/conf/"
          name: "config"
        ports:
        - name: http
          containerPort: 80
        - name: https
          containerPort: 443
        - name: admin
          containerPort: 8080
        args:
        - --configFile=/opt/k8s/conf/traefik.toml
        - --api
        - --kubernetes
        - --logLevel=INFO
---
kind: Service
apiVersion: v1
metadata:
  name: traefik-ingress-service
  namespace: kube-system
spec:
  selector:
    k8s-app: traefik-ingress-lb
  ports:
    - protocol: TCP
      port: 80
      name: web
    - protocol: TCP
      port: 443
      name: https
    - protocol: TCP
      port: 8080
      name: admin
  type: NodePort
[[email protected] k8s]# 
[[email protected] k8s]# kubectl apply -f traefik-deployment.yaml
serviceaccount "traefik-ingress-controller" created
daemonset.extensions "traefik-ingress-controller" created
service "traefik-ingress-service" created

主要变化呢是更新了几个方面:

kind: DaemonSet    官方默认是使用Deployment

hostNetwork: true   开启Node Port端口转发

volumeMounts:     新增volumes挂载点

ports:             新增https443

args:              新增configfile

以及Service层的443 ports

最后我们来测试下是否成功,这里我们可以登陆traefik-ui界面,可以看到原本http的访问,traefik会直接给我们重定向至https。

关于第三种https转发https实现方式这里就不再赘述了后续如果有需要可以在探讨,如果需要的话可以看下am的博客也就是本文参考的资料,写的很详细。

本文博客参考资料:

http://blog.51cto.com/goome/2153703

原文地址:http://blog.51cto.com/devingeng/2154041

时间: 2024-10-08 19:21:24

深入玩转K8S之如何访问业务应用(Traefik-ingress配置https篇)的相关文章

深入玩转K8S之智能化的业务弹性伸缩和滚动更新操作

在上篇我们讲到了较为傻瓜初级的弹性伸缩和滚动更新,那么接下来我们来看看较为高级的智能的滚动更新.本节的知识点呢是K8S的liveness和readiness探测,也就是说利用健康检查来做更为智能化的弹性扩容和滚动更新. 那为什么说是比较智能化呢,因为在实际生产环境中会遇到这样那样的问题,比如:容器里面应用挂了或者说新启动的容器里面应用还没有就绪等等,所以说就需要进行探测来检验容器是否满足需求. 那么一般的检测分为几种,比如:进程检测.业务检测. 进程检测呢很好理解,也就是说通过检测容器进程来验证

[转帖]K8s 工程师必懂的 10 种 Ingress 控制器

K8s 工程师必懂的 10 种 Ingress 控制器 https://www.kubernetes.org.cn/5948.html 控制器有好多啊. 2019-10-18 23:07 中文社区 分类:Kubernetes教程/入门教程 阅读(736) 评论(0) 今年 2 月,社区曾推送了一篇文章:<在 K8s 中,如何选择合适的 Ingress 控制器>.但当时只介绍了两种解决方案.为了帮助读者对 Ingress Controler 建立更完整的认识,今天,社区对现下流行的十种方案做了具

kubernetes集群traefik ingress实现同一命名空间不同微服务模块的访问

背景:kubernetes集群traefik ingress实现同一命名空间不同微服务模块的访问1.安装traefik ingresscat > traefik-ingress.yaml <<EOF kind: ClusterRoleapiVersion: rbac.authorization.k8s.io/v1metadata:name: traefik-ingress-controllerrules: apiGroups: ""resources: pods se

深入玩转K8S之利用Label控制Pod位置

首先介绍下什么是Label? Label是Kubernetes系列中一个核心概念.是一组绑定到K8s资源对象上的key/value对.同一个对象的labels属性的key必须唯一.label可以附加到各种资源对象上,如Node,Pod,Service,RC等. 通过给指定的资源对象捆绑一个或多个不用的label来实现多维度的资源分组管理功能,以便于灵活,方便地进行资源分配,调度,配置,部署等管理工作. 默认配置下,Scheduler 会将 Pod 调度到所有可用的 Node.不过有些实际情况我们

实操教程丨如何在K8S集群中部署Traefik Ingress Controller

注:本文使用的Traefik为1.x的版本 在生产环境中,我们常常需要控制来自互联网的外部进入集群中,而这恰巧是Ingress的职责. Ingress的主要目的是将HTTP和HTTPS从集群外部暴露给该集群中运行的服务.这与Ingress控制如何将外部流量路由到集群有异曲同工之妙.接下来,我们举一个实际的例子来更清楚的说明Ingress的概念. 首先,想象一下在你的Kubernetes集群中有若干个微服务(小型应用程序之间彼此通信).这些服务能够在集群内部被访问,但我们想让我们的用户从集群外部也

OkHttp配置HTTPS访问+服务器部署

目录 1 概述 2 OkHttp介绍 3 准备工作 4 OkHttp部分 4.1 暴力方案 4.2 推荐方案 4.2.1 HostnameVerifier 4.2.2 X509TrustManager 5 服务器部署 5.1 上传工程 5.2 Tomcat配置 6 验证与源码 7 常见问题 7.1 Tomcat HTTPS无法访问 7.2 OkHttp HTTPS无法访问 8 参考链接 1 概述 OkHttp配置HTTPS访问,核心为以下三个部分: sslSocketFactory() Host

如何访问pcie整个4k的配置空间

目前用于访问PCIe配置空间寄存器的方法需要追溯到原始的PCI规范.为了发起PCI总线配置周期,Intel实现的PCI规范使用IO空间的CF8h和CFCh来分别作为索引和数据寄存器,这种方法可以访问所有PCI设备的255 bytes配置寄存器.Intel Chipsets目前仍然支持这种访问PCI配置空间的方法. PCIe规范在PCI规范的基础上,将配置空间扩展到4K bytes,至于为什么扩展到4K,具体可以参考PCIe规范,这些功能都需要配置空间.原来的CF8/CFC方法仍然可以访问所有PC

nginx证书制作以及配置https并设置访问http自动跳转https(反向代理转发jboss)

nginx证书制作以及配置https并设置访问http自动跳转https 默认情况下ssl模块并未被安装,如果要使用该模块则需要在编译时指定–with-http_ssl_module参数,安装模块依赖于OpenSSL库和一些引用文件,通常这些文件并不在同一个软件包中.通常这个文件名类似libssl-dev. 生成证书 可以通过以下步骤生成一个简单的证书: 首先,进入你想创建证书和私钥的目录,例如: $ cd /usr/local/nginx/conf 创建服务器私钥,命令会让你输入一个口令: $

nginx配置https及Android客户端访问自签名证书

前一篇随笔通过keytool生成keystore并为tomcat配置https,这篇随笔记录如何给nginx配置https.如果nginx已配置https,则tomcat就不需要再配置https了.通过以下三步生成自签名证书# 生成一个key,你的私钥,openssl会提示你输入一个密码,可以输入,也可以不输,# 输入的话,以后每次使用这个key的时候都要输入密码,安全起见,还是应该有一个密码保护> openssl genrsa -des3 -out selfsign.key 4096 # 使用