文档章节

Kubernetes dashboard 通过 Ingress 提供HTTPS访问

openthings
 openthings
发布于 2018/08/18 23:38
字数 1412
阅读 6781
收藏 1

Kubernetes dashboard提供外部访问的方式有多种(端口映射、代理、NodePort、LoadBalancer、Ingress)。尽管Dashboard的流量很小,没有必要通过 Ingress 来提供访问,但Dashboard服务是一个很好的现成的服务,可以用来练习Ingress的使用和配置。

本文内容包括:安装Ingress、配置加密参数、安装Dashboard的Ingress路由等几个步骤。

1、安装 Kubernetes Dashboard

Kubernetes Dashboard是Kubernetes的可视化管理Web界面,安装参考:

这里我们将其通过Ingress设置,管理者可以通过Https进行访问,而且不需要端口映射,更符合通常的Web服务访问模式。

2、安装 Ingress controller

Ingress已是Kubernetes内置的网络入口服务,但其实现引擎需要单独安装。

3、创建和安装加密访问凭证

通过https进行访问必需要使用证书和密钥,在Kubernetes中可以通过配置一个加密凭证(TLS secret)来提供。

3.1 创建 tls secret

这里只是拿来自己使用,创建一个自己签名的证书。如果是公共服务,建议去数字证书颁发机构去申请一个正式的数字证书(需要一些服务费用);或者使用Let's encrypt去申请一个免费的(后面有介绍);如果使用Cloudflare可以自动生成证书和https转接服务,但是需要将域名迁移过去,高级功能是收费的。

#https://github.com/kubernetes/contrib/blob/master/ingress/controllers/nginx/examples/tls/README.md

openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout ./tls.key -out ./tls.crt -subj "/CN=192.168.199.230"

将会产生两个文件tls.key和tls.crt,你可以改成自己的文件名或放在特定的目录下(如果你是为公共服务器创建的,请保证这个不会被别人访问到)。后面的192.168.199.230是我的服务器IP地址,你可以改成自己的。

3.2 安装 tls secret

下一步,将这两个文件的信息创建为一个Kubernetes的secret访问凭证,我将名称指定为 k8s-dashboard-secret ,这在后面的Ingress配置时将会用到。如果你修改了这个名字,注意后面的Ingress配置yaml文件也需要同步修改。

kubectl -n kube-system create secret tls k8s-dashboard-secret --key ./tls.key --cert ./tls.crt
  • 注意:
    • 上面命令的参数 -n 指定凭证安装的命名空间。
    • 为了安全考虑,Ingress所有的资源(凭证、路由、服务)必须在同一个命名空间。

4、配置Ingress 路由

首先创建一个Ingress路由配置文件,然后设置到Kubernetes集群中。

4.1 创建Ingress 路由配置文件

将下面的内容保存为文件dashboard-ingress.yaml。里面的 /dashboard 设定为访问Kubernetes dashboard服务,/web 只是为了测试和占位,如果没有安装nginx,将会返回找不到服务的消息。

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: k8s-dashboard
  namespace: kube-system
  annotations:
    nginx.ingress.kubernetes.io/ssl-redirect: "true"
    nginx.ingress.kubernetes.io/rewrite-target: /
    nginx.ingress.kubernetes.io/secure-backends: "true"

spec:
  tls:
   - secretName: k8s-dashboard-secret
  rules:
   - http:
      paths:
      - path: /dashboard
        backend:
          serviceName: kubernetes-dashboard
          servicePort: 443
      - path: /web
        backend:
          serviceName: my-nginx
          servicePort: 80
  • 注意
    • 上面的annotations部分是必须的,以提供https和https service的支持。不过,不同的Ingress Controller可能的实现(或版本)有所不同,需要安装相应的实现(版本)进行设置。
    • 参见,#issue:https://github.com/kubernetes/ingress-nginx/issues/2460

4.2 配置 Ingress 路由

现在使用kubectl apply命令将Ingress路由设置进去。如果修改了,可以再次运行这个命令,以应用更改,可以立即生效。

kubectl apply -n kube-system -f dashboard-ingress.yaml
  • 注意:
    • 上面命令的参数 -n 指定凭证安装的命名空间。
    • 为了安全考虑,Ingress所有的资源(凭证、路由、服务)必须在同一个命名空间。

5、登录使用

5.1 建立授权账号及Token

建立Dashboard访问的授权账号,将下面的内容保存为文件,如dashboard-rbac.yaml。

apiVersion: v1
kind: ServiceAccount
metadata:
  name: dashboard
  namespace: kube-system

---

kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: dashboard
subjects:
  - kind: ServiceAccount
    name: dashboard
    namespace: kube-system
roleRef:
  kind: ClusterRole
  name: cluster-admin
  apiGroup: rbac.authorization.k8s.io

然后执行安装(所建立的账号为dashboard)

kubectl create -f dashboard-rbac.yaml

5.2 使用Token

使用下面的方法来获取dashboard登录的token。首页选择Token方法,然后填进去。

kubectl -n kube-system describe secret $(kubectl -n kube-system get secret | grep dashboard-token | awk '{print $1}')

现在,输入 https://192.168.199.230/dashboard 就可以访问Dashboard界面了。注意这里的URL地址是跟端口映射、代理等方式不一样的,更符合一般的网页服务的习惯。

5.3 Dashboard界面

Kubernetes Dashboard的界面如下,跟其它访问方式是一样样的:

  • 最后,因为是自签名证书,很多浏览器不让访问,可以使用FireFox,选择添加安全例外(Exceptions)即可。

如果更深入的使用HTTPS,我们需要了解和解决几个下面的问题:

因为Kubernetes的版本在快速演进,可能这里的方法已不再适用。如果你遇到问题,欢迎在下面留言。

 

© 著作权归作者所有

openthings

openthings

粉丝 329
博文 1155
码字总数 851371
作品 1
东城
架构师
私信 提问
加载中

评论(1)

ladyguigui
ladyguigui
您好,我是北京伟东教育科技有限公司商务运营人员,想邀请您做一些线上的技术项目分享以及商务性的合作,可以沟通一下吗
Kubernetes上建立WordPress博客

在Kubernetes上运行WordPress的好处是显而易见的。首先是安装非常简单(在已有集群的情况下),其次是可靠性更高,第三是规模可以伸缩。当然,可以在多个云之间更为容易地迁移也是非常重要的...

openthings
2018/09/15
683
0
15分钟在笔记本上搭建 Kubernetes + Istio开发环境

11月13~15日,KubeCon 上海大会召开,云原生是这个秋天最火热的技术。很多同学来问如何上手 Kubernetes和Istio 服务网格开发。本文将帮助你利用Docker CE桌面版,15分钟在笔记本上从零搭建 ...

易立
2018/11/23
0
0
从零开始搭建Kubernetes集群(五、搭建K8S Ingress)

一、前言 上一文《从零开始搭建Kubernetes集群(四、搭建K8S Dashboard)》介绍了如何搭建Dashboard。本篇将介绍如何搭建Ingress来访问K8S集群的Service。 二、Ingress简介 Ingress是个什么鬼...

宅楠军
2018/05/14
0
0
升级到Kubernetes1.8.4的配置细节差异以及k8s几个不常见的坑

kubernetes已经发布了1.8,今天需要在一个新机房部署k8s环境,于是决定尝试最新版本1.8,部署过程中故意和以前的部署步骤有些不同,故而出现了一些问题,并且发现k8s这有个新版本本身几个差异...

cleverfoxloving
2017/11/02
0
0
Contour 学习笔记(一):使用 Contour 接管 Kubernetes 的南北流量

原文链接:Contour 学习笔记(一):使用 Contour 接管 Kubernetes 的南北流量 在 Kubernetes 中运行大规模以 Web 为中心的工作负载,最关键的需求之一就是在 层实现高效流畅的入口流量管理。...

米开朗基杨
08/30
0
0

没有更多内容

加载失败,请刷新页面

加载更多

83、Mybatis和Hibernate重要区别

Mybatis;入门简单,程序容易上手开发,节省开发成本。Mybatis需要程序猿自己编写sql语句,是一个不完全的ORM框架,对sql修改和优化非常容易实现。 Mybatis适合开发需求变更频繁的系统,比如...

lianbang_W
今天
5
0
设计模式之状态模式

定义 Allow an object to alter its behavior when its internal state changes.The object will appear to change its class.(当一个对象内在状态改变时允许其改变行为,这个对象看起来像改...

陈年之后是青葱
今天
6
0
Python常用模块之os.path

os.path.abspath(path) 输入相对路径,返回绝对路径 Python 3.7.0 (v3.7.0:1bf9cc5093, Jun 27 2018, 04:59:51) [MSC v.1914 64 bit (AMD64)] on win32Type "copyright", "credits" or "lic......

松鼠大帝
今天
11
0
001. JAVA程序运行原理分析

1. 先来看看JVM运行时数据区的结构 线程独占: 每个线程都有它独立的空间,随线程生命周期而创建和销毁。 线程共享: 所有线程能访问这块内存数据,随虚拟机GC 而创建和销毁。 JVM 用来存储加载...

紫穹
今天
24
0
SDN核心思想&Mininet

2.1ONF定义的SDN基本架构: 应用层:实现网络流量的灵活控制,使网络作为管道智能 控制层:网络虚拟化实现方式,核心技术OpenFlow 转发层新型创新架构,实现网络设备控制与转发分离 2与3之间...

Firefly-
昨天
22
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部