在Kubernetes (K8S) 中进行 HTTPS 请求是非常常见的操作,而且也非常重要,因为 HTTPS 可以保障数据在传输过程中的安全性。下面我将通过一些步骤教你如何在 K8S 中进行 HTTPS 请求。

**步骤概览:**

| 步骤 | 内容 |
|----|------------------------------|
| 1 | 生成 SSL 证书和私钥 |
| 2 | 创建 Secret 对象 |
| 3 | 修改 Deployment 中的配置 |

**具体步骤及代码示例:**

**步骤 1: 生成 SSL 证书和私钥**

首先,你需要生成一个 SSL 证书和私钥,你可以使用工具如 OpenSSL 或 cert-manager 等。

```bash
# 生成 SSL 证书和私钥
$ openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout tls.key -out tls.crt -subj "/CN=example.com"
```

这里使用 OpenSSL 命令生成了一个有效期为 365 天的自签名证书和私钥,其中 "/CN=example.com" 是指定证书的 Common Name,你可以根据实际情况进行修改。

**步骤 2: 创建 Secret 对象**

接下来,你需要将生成的证书和私钥以 Secret 对象的形式存储在 K8S 中。

```yaml
apiVersion: v1
kind: Secret
metadata:
name: tls-secret
data:
tls.crt: BASE64_ENCODED_CERT
tls.key: BASE64_ENCODED_KEY
type: kubernetes.io/tls
```

在上面的示例中,你需要将生成的证书和私钥进行 Base64 编码后填写在 Secret 对象中的 tls.crt 和 tls.key 字段中。注意需要将 `BASE64_ENCODED_CERT` 和 `BASE64_ENCODED_KEY` 替换为对应的 Base64 编码后的值。

**步骤 3: 修改 Deployment 中的配置**

最后,你需要在 Deployment 的配置中指定 HTTPS 请求所需要使用的证书和私钥。

```yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-app
spec:
replicas: 1
template:
spec:
containers:
- name: my-app
image: my-app-image:latest
ports:
- containerPort: 80
protocol: TCP
volumeMounts:
- name: tls-secret
mountPath: "/certs"
readOnly: true
volumes:
- name: tls-secret
secret:
secretName: tls-secret
```

在上面的示例中,我们向 Deployment 中添加了一个 Volume,将之前创建的 Secret 对象挂载到 `/certs` 目录下。这样应用程序就可以在 `/certs` 目录下找到证书和私钥文件,并用于 HTTPS 请求。

通过以上步骤,你已经成功地在 K8S 中实现了 HTTPS 请求。记得在部署应用程序时,确保你的应用程序支持 HTTPS,并且正确配置了证书和私钥的加载路径。希望这篇文章能够帮助你更好地理解和实践在 K8S 中进行 HTTPS 请求的过程。如果有任何问题,请随时向我请教。祝好!

Reference:
- https://kubernetes.io/docs/concepts/services-networking/ingress/
- https://cert-manager.io/docs/