ingress443-service的443-pod中的nginx443方式2

目录

实现全链路HTTPS加密需要在所有的环节都支持HTTPS,而不是只在Service上配置。下面是实现全链路HTTPS加密的一种方式:

对于全链路https,需要在各个环节都进行配置。下面是一个生产环境的最新正确的配置示例:

1 硬防火墙: 需要将外网的443端口映射到k8s集群的nodeapi的443端口 2 k8s集群nodeapi: 需要配置https访问,可以使用证书,证书需要存储在secret中,供ingress使用 3 ingress: 需要暴露443端口 需要配置证书,使用secret中存储的证书 需要配置重写规则,将请求的path重写为根路径/ 4 Service: 需要配置为https访问,端口为443

5 Pod中的nginx: 需要配置https访问,需要配置证书,可以使用secret中的证书

以下是实现该数据流的示例yaml配置:

1 为Ingress Controller创建TLS证书:

apiVersion: cert-manager.io/v1 kind: Certificate metadata: name: example-com-tls namespace: ingress-controller spec: secretName: example-com-tls commonName: example.com dnsNames: - example.com issuerRef: name: letsencrypt-prod kind: ClusterIssuer 2 通过Ingress定义入口:

apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: example-ingress namespace: ingress-controller annotations: kubernetes.io/ingress.class: nginx cert-manager.io/cluster-issuer: “letsencrypt-prod” spec: tls: - hosts: - example.com secretName: example-com-tls rules: - host: example.com http: paths: - path: / pathType: Prefix backend: service: name: nginx-service port: name: https 3 为Nginx容器配置HTTPS: 在Nginx的配置文件中,需要配置HTTPS访问,并且提供证书。具体方式可以参考Nginx官方文档,这里不再赘述。

4 Deployment yaml

apiVersion: apps/v1 kind: Deployment metadata: name: nginx-deployment spec: replicas: 3 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx:latest ports: - containerPort: 443

5 通过Service暴露Nginx容器:

apiVersion: v1 kind: Service metadata: name: nginx-service namespace: ingress-controller spec: selector: app: example-app ports: - name: http port: 80 targetPort: 80 - name: https port: 443 targetPort: 443 type: ClusterIP

这样,数据流就是: 外网–> 硬防火墙443 –>k8s的nodeapi 443–>Ingress 443–>Service的443–>Pod中的Nginx443,实现了全链路

随机文章