前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >k8s如何加入TLS安全访问,技术发烧友为你探路

k8s如何加入TLS安全访问,技术发烧友为你探路

作者头像
腾讯云TStack
发布2018-08-30 13:24:03
3.2K0
发布2018-08-30 13:24:03
举报

作者简介

以前外部访问k8s里的服务,都是直接以http方式进行的,缺少TLS安全,今天给大家详细分析一下怎么为k8s加TLS安全访问。

生成并信任自签名证书

首先这里生成自签名的服务器证书,官方介绍了 easyrsa, opensslcfssl三个工具,这里使用 cfssl

代码语言:javascript
复制
brew install -y cfssl# 生成默认配置文件cfssl print-defaults config > config.jsoncfssl print-defaults csr > csr.json# 生成自定义的config.json文件cp config.json ca-config.json# 生成ca和server的证书请求json文件cp csr.json ca-csr.jsoncp csr.json server-csr.json

编辑 ca-config.json,内容如下:

代码语言:javascript
复制
{    "signing": {        "default": {            "expiry": "168h"        },        "profiles": {            "k8s-local": {                "expiry": "8760h",                "usages": [                    "signing",                    "key encipherment",                    "server auth",                    "client auth"                ]            }        }    }}

编辑ca-csr.json,内容如下:

代码语言:javascript
复制
{    "CN": "k8s-local",    "key": {        "algo": "rsa",        "size": 2048    },    "names": [        {            "C": "CN",            "ST": "GuangDong",            "L": "Shenzhen",            "O": "my self signed certificate",            "OU": "self signed"        }    ]}

编辑server-csr.json,内容如下:

代码语言:javascript
复制
{    "CN": "k8s.local",    "hosts": [        "127.0.0.1",        "*.k8s.local"    ],    "key": {        "algo": "rsa",        "size": 2048    },    "names": [        {            "C": "CN",            "ST": "GuangDong",            "L": "Shenzhen",            "O": "my self signed certificate",            "OU": "self signed"        }    ]}

执行以下命令,生成CA证书及服务器证书

代码语言:javascript
复制
cfssl gencert -initca ca-csr.json | cfssljson -bare cacfssl gencert -ca=ca.pem -ca-key=ca-key.pem --config=ca-config.json -profile=k8s-local server-csr.json | cfssljson -bare server

这样就得到 ca.pemserver-key.pemserver.pem三个证书文件,其中 ca.pem是ca的证书, server-key.pem是服务器证书的密钥, server.pem是服务器证书。

KeychainAccess打开 ca.pem文件,然后修改设置,信任该CA,如下图如示:

k8s里使用自签名证书

创建默认的tls secret:

代码语言:javascript
复制
kubectl -n kube-system create secret tls default-tls-cert --key=server-key.pem --cert=server.pem

这里举例,现在有一个服务 k8s-dashboard,它是以下面的方式部署进k8s的:

代码语言:javascript
复制
helm install --name=local-k8s-dashboard --namespace kube-system stable/kubernetes-dashboard

而该k8s集群已经部署了nginx-ingress-controller,使用的以下命令:

代码语言:javascript
复制
helm install --name local-nginx-ingress stable/nginx-ingress

这里就可以创建 k8s-dashboard这个服务的ingress规则了,如下:

代码语言:javascript
复制
cat << EOF | kubectl create -f -apiVersion: extensions/v1beta1kind: Ingressmetadata:  annotations:    nginx.ingress.kubernetes.io/ssl-redirect: "true"    nginx.ingress.kubernetes.io/rewrite-target: /    nginx.ingress.kubernetes.io/secure-backends: "true"  name: k8s-dashboard-ingress  namespace: kube-systemspec:  tls:  - hosts:    - k8s-dashboard.k8s.local    secretName: default-tls-cert  rules:  - host: k8s-dashboard.k8s.local    http:      paths:      - backend:          serviceName: local-k8s-dashboard-kubernetes-dashboard          servicePort: 443EOF

注意,这里因为 k8s-dashboard这个服务本身是以https提供服务的,所以才加上了一些与ssl相关的 annotations,如果只是普通http服务,则不需要这些 annotations

最后在chrome浏览器中就可以以 https://k8s-dashboard.k8s.local访问 k8s-dashboard服务了,而且浏览器地址栏是安全的绿色哦。

何选nginx-ingress

在上述过程中对比了k8s里两个比较重要的ingress controller:traefik-ingress和nginx-ingress,比较起来,还是nginx-ingress功能更强大,与k8s整合更好一些,看来有k8s官方维护支持果然很强大。

nginx-ingress的用户指南也写得很详细,以后可以多看看。

参考

  1. https://kubernetes.io/docs/concepts/cluster-administration/certificates/
  2. https://github.com/helm/charts/blob/master/stable/kubernetes-dashboard
  3. https://github.com/helm/charts/tree/master/stable/nginx-ingress
  4. https://github.com/kubernetes/contrib/tree/master/ingress/controllers/nginx/examples/tls
  5. https://docs.traefik.io/configuration/backends/kubernetes/
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-08-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 腾讯云TStack 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 生成并信任自签名证书
  • k8s里使用自签名证书
  • 何选nginx-ingress
  • 参考
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档