istio.io/istio@v0.0.0-20240520182934-d79c90f27776/manifests/charts/gateway/README.md (about)

     1  # Istio Gateway Helm Chart
     2  
     3  This chart installs an Istio gateway deployment.
     4  
     5  ## Setup Repo Info
     6  
     7  ```console
     8  helm repo add istio https://istio-release.storage.googleapis.com/charts
     9  helm repo update
    10  ```
    11  
    12  _See [helm repo](https://helm.sh/docs/helm/helm_repo/) for command documentation._
    13  
    14  ## Installing the Chart
    15  
    16  To install the chart with the release name `istio-ingressgateway`:
    17  
    18  ```console
    19  helm install istio-ingressgateway istio/gateway
    20  ```
    21  
    22  ## Uninstalling the Chart
    23  
    24  To uninstall/delete the `istio-ingressgateway` deployment:
    25  
    26  ```console
    27  helm delete istio-ingressgateway
    28  ```
    29  
    30  ## Configuration
    31  
    32  To view support configuration options and documentation, run:
    33  
    34  ```console
    35  helm show values istio/gateway
    36  ```
    37  
    38  ### Profiles
    39  
    40  Istio Helm charts have a concept of a `profile`, which is a bundled collection of value presets.
    41  These can be set with `--set profile=<profile>`.
    42  For example, the `demo` profile offers a preset configuration to try out Istio in a test environment, with additional features enabled and lowered resource requirements.
    43  
    44  For consistency, the same profiles are used across each chart, even if they do not impact a given chart.
    45  
    46  Explicitly set values have highest priority, then profile settings, then chart defaults.
    47  
    48  As an implementation detail of profiles, the default values for the chart are all nested under `defaults`.
    49  When configuring the chart, you should not include this.
    50  That is, `--set some.field=true` should be passed, not `--set defaults.some.field=true`.
    51  
    52  ### OpenShift
    53  
    54  When deploying the gateway in an OpenShift cluster, use the `openshift` profile to override the default values, for example:
    55  
    56  ```console
    57  helm install istio-ingressgateway istio/gateway --set profile=openshift
    58  ```
    59  
    60  ### `image: auto` Information
    61  
    62  The image used by the chart, `auto`, may be unintuitive.
    63  This exists because the pod spec will be automatically populated at runtime, using the same mechanism as [Sidecar Injection](istio.io/latest/docs/setup/additional-setup/sidecar-injection).
    64  This allows the same configurations and lifecycle to apply to gateways as sidecars.
    65  
    66  Note: this does mean that the namespace the gateway is deployed in must not have the `istio-injection=disabled` label.
    67  See [Controlling the injection policy](https://istio.io/latest/docs/setup/additional-setup/sidecar-injection/#controlling-the-injection-policy) for more info.
    68  
    69  ### Examples
    70  
    71  #### Egress Gateway
    72  
    73  Deploying a Gateway to be used as an [Egress Gateway](https://istio.io/latest/docs/tasks/traffic-management/egress/egress-gateway/):
    74  
    75  ```yaml
    76  service:
    77    # Egress gateways do not need an external LoadBalancer IP
    78    type: ClusterIP
    79  ```
    80  
    81  #### Multi-network/VM Gateway
    82  
    83  Deploying a Gateway to be used as a [Multi-network Gateway](https://istio.io/latest/docs/setup/install/multicluster/) for network `network-1`:
    84  
    85  ```yaml
    86  networkGateway: network-1
    87  ```
    88  
    89  ### Migrating from other installation methods
    90  
    91  Installations from other installation methods (such as istioctl, Istio Operator, other helm charts, etc) can be migrated to use the new Helm charts
    92  following the guidance below.
    93  If you are able to, a clean installation is simpler. However, this often requires an external IP migration which can be challenging.
    94  
    95  WARNING: when installing over an existing deployment, the two deployments will be merged together by Helm, which may lead to unexpected results.
    96  
    97  #### Legacy Gateway Helm charts
    98  
    99  Istio historically offered two different charts - `manifests/charts/gateways/istio-ingress` and `manifests/charts/gateways/istio-egress`.
   100  These are replaced by this chart.
   101  While not required, it is recommended all new users use this chart, and existing users migrate when possible.
   102  
   103  This chart has the following benefits and differences:
   104  * Designed with Helm best practices in mind (standardized values options, values schema, values are not all nested under `gateways.istio-ingressgateway.*`, release name and namespace taken into account, etc).
   105  * Utilizes Gateway injection, simplifying upgrades, allowing gateways to run in any namespace, and avoiding repeating config for sidecars and gateways.
   106  * Published to official Istio Helm repository.
   107  * Single chart for all gateways (Ingress, Egress, East West).
   108  
   109  #### General concerns
   110  
   111  For a smooth migration, the resource names and `Deployment.spec.selector` labels must match.
   112  
   113  If you install with `helm install istio-gateway istio/gateway`, resources will be named `istio-gateway` and the `selector` labels set to:
   114  
   115  ```yaml
   116  app: istio-gateway
   117  istio: gateway # the release name with leading istio- prefix stripped
   118  ```
   119  
   120  If your existing installation doesn't follow these names, you can override them. For example, if you have resources named `my-custom-gateway` with `selector` labels
   121  `foo=bar,istio=ingressgateway`:
   122  
   123  ```yaml
   124  name: my-custom-gateway # Override the name to match existing resources
   125  labels:
   126    app: "" # Unset default app selector label
   127    istio: ingressgateway # override default istio selector label
   128    foo: bar # Add the existing custom selector label
   129  ```
   130  
   131  #### Migrating an existing Helm release
   132  
   133  An existing helm release can be `helm upgrade`d to this chart by using the same release name. For example, if a previous
   134  installation was done like:
   135  
   136  ```console
   137  helm install istio-ingress manifests/charts/gateways/istio-ingress -n istio-system
   138  ```
   139  
   140  It could be upgraded with
   141  
   142  ```console
   143  helm upgrade istio-ingress manifests/charts/gateway -n istio-system --set name=istio-ingressgateway --set labels.app=istio-ingressgateway --set labels.istio=ingressgateway
   144  ```
   145  
   146  Note the name and labels are overridden to match the names of the existing installation.
   147  
   148  Warning: the helm charts here default to using port 80 and 443, while the old charts used 8080 and 8443.
   149  If you have AuthorizationPolicies that reference port these ports, you should update them during this process,
   150  or customize the ports to match the old defaults.
   151  See the [security advisory](https://istio.io/latest/news/security/istio-security-2021-002/) for more information.
   152  
   153  #### Other migrations
   154  
   155  If you see errors like `rendered manifests contain a resource that already exists` during installation, you may need to forcibly take ownership.
   156  
   157  The script below can handle this for you. Replace `RELEASE` and `NAMESPACE` with the name and namespace of the release:
   158  
   159  ```console
   160  KINDS=(service deployment)
   161  RELEASE=istio-ingressgateway
   162  NAMESPACE=istio-system
   163  for KIND in "${KINDS[@]}"; do
   164      kubectl --namespace $NAMESPACE --overwrite=true annotate $KIND $RELEASE meta.helm.sh/release-name=$RELEASE
   165      kubectl --namespace $NAMESPACE --overwrite=true annotate $KIND $RELEASE meta.helm.sh/release-namespace=$NAMESPACE
   166      kubectl --namespace $NAMESPACE --overwrite=true label $KIND $RELEASE app.kubernetes.io/managed-by=Helm
   167  done
   168  ```
   169  
   170  You may ignore errors about resources not being found.