在同一主机上的Nginx Ingress Controller上为不同路径同时配置TLS和mTLS

85次阅读
没有评论

问题描述

在Azure AKS中使用NGINX Ingress Controller暴露一些服务,其中一些服务需要使用客户端证书进行授权。用户想知道是否可以在同一主机上的不同路径下同时配置常规TLS和需要客户端证书的mTLS,还是需要为需要mTLS的服务单独设置一个主机?

解决方案

请注意以下操作可能因版本差异而有所不同。确保在开始操作之前做好备份。

方案1:使用不同的路径和TLS配置

在NGINX Ingress Controller中,你可以使用不同的路径和TLS配置来为同一主机上的不同服务提供不同的证书认证方式。下面是如何在同一主机上配置不同路径的TLS和mTLS的步骤:

  1. 首先,确保你的Ingress资源中配置了TLS选项,用于支持常规TLS。例如,在你的Ingress资源中添加以下部分:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: your-ingress-name
spec:
  rules:
    - host: your.domain.com
      http:
        paths:
          - path: /tls-path
            pathType: Prefix
            backend:
              service:
                name: tls-service
                port:
                  number: 80
  tls:
    - hosts:
        - your.domain.com
      secretName: tls-secret
  1. 对于需要mTLS的服务,你可以创建另一个Ingress资源,将路径配置为需要mTLS的路径,并指定相应的证书Secret。例如:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: your-mtls-ingress
spec:
  rules:
    - host: your.domain.com
      http:
        paths:
          - path: /mtls-path
            pathType: Prefix
            backend:
              service:
                name: mtls-service
                port:
                  number: 80
  tls:
    - hosts:
        - your.domain.com
      secretName: mtls-secret

在上述示例中,我们分别创建了两个Ingress资源:一个用于常规TLS的服务,另一个用于需要mTLS的服务。每个Ingress资源都根据路径来区分不同的服务,并分别配置了相应的TLS证书。

方案2:使用不同的主机

如果你希望更加分离常规TLS和mTLS的服务,你可以为每个服务使用不同的主机名。这样可以更明确地区分两种不同的证书认证方式。以下是示例步骤:

  1. 首先,确保你的Ingress资源中配置了TLS选项,用于支持常规TLS。例如:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: your-ingress-name
spec:
  rules:
    - host: tls-service.domain.com
      http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: tls-service
                port:
                  number: 80
  tls:
    - hosts:
        - tls-service.domain.com
      secretName: tls-secret
  1. 对于需要mTLS的服务,创建另一个Ingress资源,使用不同的主机名和相应的证书Secret。例如:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: your-mtls-ingress
spec:
  rules:
    - host: mtls-service.domain.com
      http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: mtls-service
                port:
                  number: 80
  tls:
    - hosts:
        - mtls-service.domain.com
      secretName: mtls-secret

在上述示例中,我们分别为常规TLS的服务和需要mTLS的服务创建了不同的Ingress资源,并使用不同的主机名来区分它们。每个Ingress资源都配置了相应的TLS证书。

请根据你的实际需求选择合适的方案:使用不同的路径和TLS配置来在同一主机上实现不同证书认证方式,或者使用不同的主机名来更明确地区分这两种服务。

正文完