File: Resources\IngressSpecV1.cs
Web Access
Project: src\src\Aspire.Hosting.Kubernetes\Aspire.Hosting.Kubernetes.csproj (Aspire.Hosting.Kubernetes)
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
 
using YamlDotNet.Serialization;
 
namespace Aspire.Hosting.Kubernetes.Resources;
 
/// <summary>
/// Represents the specification of an Ingress resource in Kubernetes (networking.k8s.io/v1).
/// </summary>
/// <remarks>
/// This class defines the configuration options for an Ingress resource to manage HTTP and HTTPS
/// access to services in a Kubernetes cluster. It includes the ability to set default backends,
/// define rules, specify TLS configurations, and optionally set an ingress class name.
/// </remarks>
[YamlSerializable]
public sealed class IngressSpecV1
{
    /// <summary>
    /// Defines the default backend for a Kubernetes ingress resource.
    /// </summary>
    /// <remarks>
    /// The default backend is used to handle requests that do not match any of the defined rules
    /// in the ingress configuration. It can specify a service or other resource to respond to unmatched traffic.
    /// </remarks>
    [YamlMember(Alias = "defaultBackend")]
    public IngressBackendV1 DefaultBackend { get; set; } = null!;
 
    /// <summary>
    /// Specifies the IngressClass associated with the Kubernetes Ingress resource.
    /// </summary>
    /// <remarks>
    /// The IngressClassName defines which controller will handle and process the associated ingress rules.
    /// If this property is not set, the Ingress resource will not be associated with a specific controller.
    /// </remarks>
    [YamlMember(Alias = "ingressClassName")]
    public string IngressClassName { get; set; } = null!;
 
    /// <summary>
    /// Gets the collection of ingress rules associated with the Kubernetes ingress resource.
    /// </summary>
    /// <remarks>
    /// The <c>Rules</c> property defines the routing configuration for incoming network traffic,
    /// specified as a list of <see cref="IngressRuleV1"/> objects. Each rule corresponds to a set
    /// of conditions under which the traffic is routed to a specific backend.
    /// </remarks>
    [YamlMember(Alias = "rules")]
    public List<IngressRuleV1> Rules { get; } = [];
 
    /// <summary>
    /// Represents the TLS configuration for a Kubernetes ingress resource.
    /// </summary>
    /// <remarks>
    /// This property defines a collection of TLS settings used to secure ingress traffic. Each
    /// entry in the collection specifies a TLS certificate and the associated set of hosts.
    /// </remarks>
    [YamlMember(Alias = "tls")]
    public List<IngressTLSV1> Tls { get; } = [];
}