启用 Kubernetes 中的 TLS 证书认证实践

前言

Kubernetes 是一款优秀的容器编排平台,随着它的发展和普及,也越来越受到企业和开发者的青睐。作为一个前端开发者,我们应该也要学习一些 Kubernetes 的知识,以便更好地与后端开发者协作,更好地构建和部署应用。

在 Kubernetes 中,TLS 证书认证是一种常见的安全机制,通过证书来验证客户端和服务端之间的身份,防止网络攻击。本文将详细介绍如何启用 Kubernetes 中的 TLS 证书认证,并包含示例代码。

准备工作

在开始正式的操作之前,我们需要准备一些工作。

  1. 一个 Kubernetes 集群
  2. 一个可用的域名,如 example.com
  3. 一个 SSL 证书,可从免费的 Let’s Encrypt 证书中心获得

步骤

1. 生成 SSL 证书

可以使用 certbot 来生成 Let’s Encrypt SSL 证书。

首先安装 certbot:

sudo apt-get update
sudo apt-get install certbot python3-certbot-nginx

然后生成 SSL 证书:

sudo certbot certonly --manual --preferred-challenges dns

按照提示操作,完成证书的生成,在生成的过程中需要添加一条 TXT 记录,用于证明域名的所有权。

证书生成后,会在 /etc/letsencrypt/live/ 目录下生成三个文件:cert.pem、chain.pem 和 privkey.pem。将这三个文件复制到本地,后面会用到。

2. 在 Kubernetes 中创建 Secret 对象

在 Kubernetes 中,Secret 是用于存储一些敏感信息的对象,包括 TLS 证书、用户名、密码等。我们可以使用 kubectl 命令来创建 Secret 对象。

kubectl create secret tls example-com-cert --cert=cert.pem --key=privkey.pem

其中,example-com-cert 是 Secret 的名称,cert.pem 和 privkey.pem 分别是证书文件和私钥文件的文件名。

3. 在 Kubernetes 中配置 Ingress 对象

在 Kubernetes 中,Ingress 是用于暴露服务和路由流量的对象,我们可以使用 Ingress 来启用 TLS 证书认证。在使用 Ingress 前,需要先安装 Ingress Controller。

kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.0.0/deploy/static/provider/cloud/deploy.yaml

安装完成后,在 Kubernetes 中配置 Ingress 对象。

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: example-com-ingress
  annotations:
    nginx.ingress.kubernetes.io/ssl-redirect: "true"
spec:
  tls:
  - hosts:
    - example.com
    secretName: example-com-cert
  rules:
  - host: example.com
    http:
      paths:
      - path: /
        backend:
          serviceName: example-com-service
          servicePort: 80

其中,example.com 是你的域名,example-com-cert 是前面创建的 Secret 的名称。

4. 验证

这时候,我们可以通过浏览器访问 https://example.com,如果一切正常,应该能够看到服务的响应。如果有问题,可以通过 kubectl get ingress 命令来查看 Ingress 的状态和日志。

总结

本文介绍了如何启用 Kubernetes 中的 TLS 证书认证,并给出了相关的示例代码。虽然在前端开发中用到的较少,但了解 Kubernetes 的基本知识是一种优秀的全栈工程师素养。希望这篇文章对大家有所帮助,也欢迎大家补充和讨论。

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/65a7391dadd4f0e0ff02f68d


纠错反馈