在Kubernetes(简称K8S)集群中,确保仅允许通过HTTPS协议进行访问是一项重要的安全措施。在本文中,我将详细介绍如何设置K8S集群仅允许HTTPS访问,并提供相应的代码示例,以帮助刚入行的开发者了解并实现这一过程。

整个过程主要包括以下步骤:

| 步骤 | 操作 |
|:---:|:-------------------:|
| 1 | 生成TLS证书 |
| 2 | 创建Secret对象 |
| 3 | 创建Ingress对象 |
| 4 | 部署应用程序 |

接下来,我将逐步介绍每个步骤需要做的事情,并提供对应的代码示例。

### 1. 生成TLS证书
首先,我们需要生成用于HTTPS访问的TLS证书。可以使用OpenSSL等工具来生成证书,以下是一个简单的示例:

```bash
# 生成私钥
openssl genrsa -out tls.key 2048

# 生成证书签署请求
openssl req -new -key tls.key -out tls.csr

# 自签名证书
openssl x509 -req -in tls.csr -signkey tls.key -out tls.crt

# 清理中间证书签署请求
rm tls.csr
```

### 2. 创建Secret对象
在K8S中,我们需要使用Secret对象来存储TLS证书,以便Ingress对象能够使用。以下是一个创建Secret对象的示例:

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

将 `tls.crt` 和 `tls.key` 替换为实际的证书和私钥内容进行Base64编码后的结果。

### 3. 创建Ingress对象
接下来,我们需要创建Ingress对象来配置应用程序的访问规则,并指定使用TLS证书。以下是一个创建Ingress对象的示例:

```yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: my-ingress
spec:
tls:
- hosts:
- example.com
secretName: tls-secret
rules:
- host: example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: my-service
port:
number: 80
```

在上面的示例中,我们指定了TLS证书的Secret名称为 `tls-secret`,并配置了域名为 `example.com` 的访问规则。

### 4. 部署应用程序
最后,部署你的应用程序并将其暴露出来。确保应用程序的Service和Deployment对象已正确配置。

通过以上步骤,你已经成功地设置了K8S集群仅允许通过HTTPS进行访问。记得定期更新证书以确保安全性,并根据实际情况做出适当的调整。希望本文对你有所帮助!