Ingress实现HTTPS访问(二)

2023-05-05 09:44:00 浏览数 (1)

创建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/tlsdata字段包含了证书和密钥的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连接。

如果一切正常,将看到服务的响应内容。

0 人点赞