<commit_before>---
title: Graduate Ingress to GA
authors:
  - "@bowei"
owning-sig: sig-network
participating-sigs:
reviewers:
  - "@aledbf"
approvers:
  - "@thockin"
  - "@caseydavenport"
editor:
creation-date: 2018-01-25
last-updated: 2018-04-25
status: implementable
see-also:
replaces:
superseded-by:
---

# Graduate Ingress to GA

## Summary

- Move the Ingress resource from the current API group
  (extensions.v1beta1) to networking.v1beta1.
- Graduate the Ingress API with bug fixes to GA.

## Motivation

The `extensions` API group is considered deprecated.  Ingress is the
last non-deprecated API in that group.  All other types have been
migrated to other permanent API groups.  Such an API group migration
takes three minor version cycles (~9 months) to ensure
compatibility. This means any API group movement should be started
sooner rather than later.

The Ingress resource has been in a beta state for a *long* time (first
commit was in Fall 2015). While the interface [is not
perfect][survey], there are many [independent implementations][ingress-docs]
in active use.

We have a couple of choices (and non-choices, see appendix) for the
current resource:

1. We can delete the current resource from extensions.v1beta1 in
  anticipation that an improved API can replace it.

1. We can copy the API as-is (or with minor changes) into
  networking.v1beta1, preserving/converting existing data (following
  the same approach taken with all other extensions.v1beta1<commit_msg>Fix TOC<commit_after>---
title: Graduate Ingress to GA
authors:
  - "@bowei"
owning-sig: sig-network
participating-sigs:
reviewers:
  - "@aledbf"
approvers:
  - "@thockin"
  - "@caseydavenport"
editor:
creation-date: 2018-01-25
last-updated: 2018-04-25
status: implementable
see-also:
replaces:
superseded-by:
---

# Graduate Ingress to GA

## Table of contents

<!-- toc -->
- [Summary](#summary)
- [Motivation](#motivation)
  - [Goals](#goals)
- [Design](#design)
  - [Summary of the proposed changes](#summary-of-the-proposed-changes)
    - [Potential features for post V1](#potential-features-for-post-v1)
  - [Path as a prefix](#path-as-a-prefix)
    - [Paths proposal](#paths-proposal)
      - [Path matching semantics](#path-matching-semantics)
      - [<code>Exact</code> match](#-match)
      - [<code>Prefix</code> match](#-match-1)
      - [<code>ImplementationSpecific</code> match](#-match-2)
      - [Examples](#examples)
  - [<code>backend</code> to <code>defaultBackend</code>](#-to-)
  - [Hostname wildcards](#hostname-wildcards)
    - [Hostname proposal](#hostname-proposal)
      - [Hostname match examples](#hostname-match-examples)
  - [Status](#status)
  - [Ingress class](#ingress-class)
    - [Ingress class proposal](#ingress-class-proposal)
      - [Interoperability with previous annotation](#interoperability-with-previous-annotation)
  - [Alternative backend types](#alternative-backend-types)
    - [Backend types proposal](#backend-types-proposal)
      - [Backend types examples](#backend-types-examples)
      - [Supporting custom backends (non-normative)](#supporting-custom-backends-non-normative)
- [Proposed roadmap](#proposed-roadmap)
  - [1.14](#114)
    - [Test plan](#test-plan)
  - [1.15](#115)
  - [1.16](#116)
  - [1.17](#117)
  - [1.18](#118)
- [Graduation Criteria](#graduation-criteria)
  - [API group move to <code>networking.k8s.io/v1beta1</code>](#api-group-move-to-)
  - [GA](#ga)
- [Implementation History](#implementation-history)
- [Alternatives](#alternatives)
- [Appendix](#appendix)
  - [Design discussions](#design-discussions)
  - [Non-options](#non-options)
  - [Future design: Healthchecks](#future-design-healthchecks)
    - [Healthchecks proposal](#healthchecks-proposal)
  - [Potential pre-GA work](#potential-pre-ga-work)
  - [Rejected designs](#rejected-designs)
    - [Portable regex for Path](#portable-regex-for-path)
<!-- /toc -->

## Summary

- Move the Ingress resource from the current API group
  (extensions.v1beta1) to networking.v1beta1.
- Graduate the Ingress API with bug fixes to GA.

## Motivation

The `extensions` API group is considered deprecated.  Ingress is the
last non-deprecated API in that group.  All other types have been
migrated to other permanent API groups.  Such an API group migration
takes three minor version cycles (~9 months) to ensure
compatibility. This means any API group movement should be started
sooner rather than later.

The Ingress resource has been in a beta state for a *long* time (first
commit was in Fall 2015). While the interface [is not
perfect][survey], there are many [independent implementations][ingress-docs]
in active use.

We have a couple of choices (and non-choices, see appendix) for the
current resource:

1. We can delete the current resource from extensions.v1beta1 in
  anticipation that an improved API can replace it.

1. We can copy the API as-is (or with minor changes) into
  networking.v1beta1, preserving/converting existing data (following
  the same approach taken with all other extensions.v1beta1
{'fraction_non_alphanumeric': 0.12010340027838537, 'fraction_numerical': 0.020481208987870352, 'mean_word_length': 4.143149284253579, 'pattern_counts': {'":': 0, '<': 17, '<?xml version=': 0, '>': 17, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '2265431', 'n_tokens_mistral': 1681, 'n_tokens_neox': 1526, 'n_words': 502}