创建Secret资源
存储证书和密钥的Secret资源需要与Ingress资源关联。创建Secret资源的命令如下:
代码语言:javascript复制apiVersion: v1
kind: Secret
metadata:
name: tls-secret
type: kubernetes.io/tls
data:
tls.crt: BASE64_ENCODED_CERTIFICATE
tls.key: BASE64_ENCODED_PRIVATE_KEY
在上述配置中,metadata
字段下的name
字段指定了Secret资源的名称,type
字段指定了Secret资源的类型,即kubernetes.io/tls
。data
字段包含了证书和密钥的Base64编码。
注意,在实际使用时,需要将BASE64_ENCODED_CERTIFICATE和BASE64_ENCODED_PRIVATE_KEY替换为实际的证书和密钥的Base64编码
部署服务
创建Ingress资源和Secret资源后,需要部署服务并将其暴露为ClusterIP类型的Service资源。在这里,我们将使用一个名为web的示例服务作为示例。
示例服务的部署配置如下:
代码语言:javascript复制apiVersion: apps/v1
kind: Deployment
metadata:
name: web
spec:
selector:
matchLabels:
app: web
replicas: 1
template:
metadata:
labels:
app: web
spec:
containers:
- name: web
image: nginx:latest
ports:
- containerPort: 80
在上述配置中,metadata
字段下的name
字段指定了Deployment资源的名称,selector
字段指定了部署的标签选择器,replicas
字段指定了副本数。
template
字段下的metadata
字段和spec
字段分别指定了Pod模板的标签和容器配置。在这里,我们使用了Nginx的镜像,并将容器暴露在80端口上。
创建完Deployment资源后,需要将其暴露为ClusterIP类型的Service资源。示例Service资源的部署配置如下:
代码语言:javascript复制apiVersion: v1
kind: Service
metadata:
name: web
spec:
selector:
app: web
ports:
- name: http
port: 80
targetPort: 80
在上述配置中,metadata
字段下的name
字段指定了Service资源的名称,selector
字段指定了Service资源的标签选择器,ports
字段指定了端口映射关系。
测试
部署完Ingress资源、服务和控制器后,可以使用curl命令测试HTTPS访问。假设域名为example.com,部署的服务名为web,测试命令如下:
代码语言:javascript复制$ curl -k https://example.com/web
在上述命令中,-k
选项用于忽略证书验证。如果证书验证失败,将无法建立HTTPS连接。
如果一切正常,将看到服务的响应内容。