<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Kubeflow – Deployment</title>
    <link>/docs/ibm/deploy/</link>
    <description>Recent content in Deployment on Kubeflow</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>en-us</language>
    
	  <atom:link href="/docs/ibm/deploy/index.xml" rel="self" type="application/rss+xml" />
    
    
      
        
      
    
    
    <item>
      <title>Docs: Install Kubeflow</title>
      <link>/docs/ibm/deploy/install-kubeflow/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>/docs/ibm/deploy/install-kubeflow/</guid>
      <description>
        
        
        &lt;p&gt;This guide describes how to use the kfctl binary to deploy Kubeflow on IBM Cloud Kubernetes Service (IKS).&lt;/p&gt;
&lt;h2 id=&#34;prerequisites&#34;&gt;Prerequisites&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Authenticate with IBM Cloud&lt;/p&gt;
&lt;p&gt;Log into IBM Cloud using the &lt;a href=&#34;https://www.ibm.com/cloud/cli&#34;&gt;IBM Cloud Command Line Interface (CLI)&lt;/a&gt; as follows:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;ibmcloud login
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Create and access a Kubernetes cluster on IKS&lt;/p&gt;
&lt;p&gt;To deploy Kubeflow on IBM Cloud, you need a cluster running on IKS. If you don&amp;rsquo;t have a cluster running, follow the &lt;a href=&#34;/docs/ibm/create-cluster&#34;&gt;Create an IBM Cloud cluster&lt;/a&gt; guide.&lt;/p&gt;
&lt;p&gt;Run the following command to switch the Kubernetes context and access the cluster:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;ibmcloud ks cluster config --cluster &amp;lt;cluster_name&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Replace &lt;code&gt;&amp;lt;cluster_name&amp;gt;&lt;/code&gt; with your cluster name.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;ibm-cloud-block-storage-setup&#34;&gt;IBM Cloud Block Storage Setup&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt;: This section is only required when the worker nodes provider &lt;code&gt;WORKER_NODE_PROVIDER&lt;/code&gt; is set to &lt;code&gt;classic&lt;/code&gt;. For other infrastructures, IBM Cloud Block Storage is already set up as the cluster&amp;rsquo;s default storage class.&lt;/p&gt;
&lt;p&gt;When using the &lt;code&gt;classic&lt;/code&gt; worker nodes provider of IBM Cloud Kubernetes cluster, by default, it uses &lt;a href=&#34;https://www.ibm.com/cloud/file-storage&#34;&gt;IBM Cloud File Storage&lt;/a&gt; based on NFS as the default storage class. File Storage is designed to run RWX (read-write multiple nodes) workloads with proper security built around it. Therefore, File Storage &lt;a href=&#34;https://cloud.ibm.com/docs/containers?topic=containers-security#container&#34;&gt;does not allow &lt;code&gt;fsGroup&lt;/code&gt; securityContext&lt;/a&gt; which is needed for DEX and Kubeflow Jupyter Server.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.ibm.com/cloud/block-storage&#34;&gt;IBM Cloud Block Storage&lt;/a&gt; provides a fast way to store data and
satisfy many of the Kubeflow persistent volume requirements such as &lt;code&gt;fsGroup&lt;/code&gt; out of the box and optimized RWO (read-write single node) which is used on all Kubeflow&amp;rsquo;s persistent volume claim.&lt;/p&gt;
&lt;p&gt;Therefore, you&amp;rsquo;re recommended to set up &lt;a href=&#34;https://cloud.ibm.com/docs/containers?topic=containers-block_storage#add_block&#34;&gt;IBM Cloud Block Storage&lt;/a&gt; as the default storage class so that you can
get the best experience from Kubeflow.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&#34;https://helm.sh/docs/intro/install/&#34;&gt;Follow the instructions&lt;/a&gt; to install the Helm version 3 client on your local machine.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Add the IBM Cloud Helm chart repository to the cluster where you want to use the IBM Cloud Block Storage plug-in.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;helm repo add iks-charts https://icr.io/helm/iks-charts
helm repo update
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Install the IBM Cloud Block Storage plug-in. When you install the plug-in, pre-defined block storage classes are added to your cluster.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;helm install 1.7.0 iks-charts/ibmcloud-block-storage-plugin -n kube-system
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Example output:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;NAME: 1.7.0
LAST DEPLOYED: Fri Aug 28 11:23:56 2020
NAMESPACE: kube-system
STATUS: deployed
REVISION: 1
NOTES:
Thank you for installing: ibmcloud-block-storage-plugin.   Your release is named: 1.7.0
...
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Verify that the installation was successful.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;kubectl get pod -n kube-system &lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;|&lt;/span&gt; grep block
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Verify that the storage classes for Block Storage were added to your cluster.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;kubectl get storageclasses | grep block
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Set the Block Storage as the default storage class.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span style=&#34;color:#000&#34;&gt;NEW_STORAGE_CLASS&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;ibmc-block-gold
&lt;span style=&#34;color:#000&#34;&gt;OLD_STORAGE_CLASS&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;$(&lt;/span&gt;kubectl get sc -o &lt;span style=&#34;color:#000&#34;&gt;jsonpath&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#39;{.items[?(@.metadata.annotations.storageclass\.kubernetes\.io\/is-default-class==&amp;#34;true&amp;#34;)].metadata.name}&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;)&lt;/span&gt;
kubectl patch storageclass &lt;span style=&#34;color:#4e9a06&#34;&gt;${&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;NEW_STORAGE_CLASS&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;}&lt;/span&gt; -p &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#39;{&amp;#34;metadata&amp;#34;: {&amp;#34;annotations&amp;#34;:{&amp;#34;storageclass.kubernetes.io/is-default-class&amp;#34;:&amp;#34;true&amp;#34;}}}&amp;#39;&lt;/span&gt;

&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# List all the (default) storage classes&lt;/span&gt;
kubectl get storageclass &lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;|&lt;/span&gt; grep &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;(default)&amp;#34;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Example output:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;ibmc-block-gold (default)   ibm.io/ibmc-block   65s
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Make sure &lt;code&gt;ibmc-block-gold&lt;/code&gt; is the only &lt;code&gt;(default)&lt;/code&gt; storage class. If there are two or more rows in the above output, unset the previous &lt;code&gt;(default)&lt;/code&gt; storage classes with the command below:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;kubectl patch storageclass &lt;span style=&#34;color:#4e9a06&#34;&gt;${&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;OLD_STORAGE_CLASS&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;}&lt;/span&gt; -p &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#39;{&amp;#34;metadata&amp;#34;: {&amp;#34;annotations&amp;#34;:{&amp;#34;storageclass.kubernetes.io/is-default-class&amp;#34;:&amp;#34;false&amp;#34;}}}&amp;#39;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;understanding-the-kubeflow-deployment-process&#34;&gt;Understanding the Kubeflow deployment process&lt;/h2&gt;
&lt;p&gt;The deployment process is controlled by the following commands:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;build&lt;/strong&gt; - (Optional) Creates configuration files defining the various
resources in your deployment. You only need to run &lt;code&gt;kfctl build&lt;/code&gt; if you want
to edit the resources before running &lt;code&gt;kfctl apply&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;apply&lt;/strong&gt; - Creates or updates the resources.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;delete&lt;/strong&gt; - Deletes the resources.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;app-layout&#34;&gt;App layout&lt;/h3&gt;
&lt;p&gt;Your Kubeflow application directory &lt;strong&gt;${KF_DIR}&lt;/strong&gt; contains the following files and
directories:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;${CONFIG_FILE}&lt;/strong&gt; is a YAML file that defines configurations related to your
Kubeflow deployment.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;This file is a copy of the GitHub-based configuration YAML file that
you used when deploying Kubeflow. For example, &lt;a href=&#34;https://raw.githubusercontent.com/kubeflow/manifests/v1.1-branch/kfdef/kfctl_ibm.v1.1.0.yaml&#34;&gt;https://raw.githubusercontent.com/kubeflow/manifests/v1.1-branch/kfdef/kfctl_ibm.v1.1.0.yaml&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;When you run &lt;code&gt;kfctl apply&lt;/code&gt; or &lt;code&gt;kfctl build&lt;/code&gt;, kfctl creates
a local version of the configuration file, &lt;code&gt;${CONFIG_FILE}&lt;/code&gt;,
which you can further customize if necessary.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;kustomize&lt;/strong&gt; is a directory that contains the kustomize packages for Kubeflow applications.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The directory is created when you run &lt;code&gt;kfctl build&lt;/code&gt; or &lt;code&gt;kfctl apply&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;You can customize the Kubernetes resources (modify the manifests and run &lt;code&gt;kfctl apply&lt;/code&gt; again).&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;kubeflow-installation&#34;&gt;Kubeflow installation&lt;/h2&gt;
&lt;p&gt;Run the following commands to set up and deploy Kubeflow.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Download the kfctl v1.1.0 release from the
&lt;a href=&#34;https://github.com/kubeflow/kfctl/releases/tag/v1.1.0&#34;&gt;Kubeflow releases
page&lt;/a&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Unpack the tar ball&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;tar -xvf kfctl_v1.1.0_&amp;lt;platform&amp;gt;.tar.gz
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Make kfctl binary easier to use (optional). If you don’t add the binary to your path, you must use the full path to the kfctl binary each time you run it.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;export PATH=$PATH:&amp;lt;path to where kfctl was unpacked&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Choose either &lt;strong&gt;single user&lt;/strong&gt; or &lt;strong&gt;multi-tenant&lt;/strong&gt; section based on your usage.&lt;/p&gt;
&lt;h3 id=&#34;single-user&#34;&gt;Single user&lt;/h3&gt;
&lt;p&gt;Run the following commands to set up and deploy Kubeflow for a single user without any authentication.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# Set KF_NAME to the name of your Kubeflow deployment. This also becomes the
# name of the directory containing your configuration.
# For example, your deployment name can be &#39;my-kubeflow&#39; or &#39;kf-test&#39;.
export KF_NAME=&amp;lt;your choice of name for the Kubeflow deployment&amp;gt;

# Set the path to the base directory where you want to store one or more 
# Kubeflow deployments. For example, /opt/.
# Then set the Kubeflow application directory for this deployment.
export BASE_DIR=&amp;lt;path to a base directory&amp;gt;
export KF_DIR=${BASE_DIR}/${KF_NAME}

# Set the configuration file to use, such as the file specified below:
export CONFIG_URI=&amp;quot;https://raw.githubusercontent.com/kubeflow/manifests/v1.1-branch/kfdef/kfctl_ibm.v1.1.0.yaml&amp;quot;

# Generate and deploy Kubeflow:
mkdir -p ${KF_DIR}
cd ${KF_DIR}
kfctl apply -V -f ${CONFIG_URI}
&lt;/code&gt;&lt;/pre&gt;&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;${KF_NAME}&lt;/strong&gt; - The name of your Kubeflow deployment.
If you want a custom deployment name, specify that name here.
For example,  &lt;code&gt;my-kubeflow&lt;/code&gt; or &lt;code&gt;kf-test&lt;/code&gt;.
The value of KF_NAME must consist of lower case alphanumeric characters or
&amp;lsquo;-&amp;rsquo;, and must start and end with an alphanumeric character.
The value of this variable cannot be greater than 25 characters. It must
contain just a name, not a directory path.
This value also becomes the name of the directory where your Kubeflow
configurations are stored, that is, the Kubeflow application directory.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;${KF_DIR}&lt;/strong&gt; - The full path to your Kubeflow application directory.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;multi-user-auth-enabled&#34;&gt;Multi-user, auth-enabled&lt;/h3&gt;
&lt;p&gt;Run the following steps to deploy Kubeflow with &lt;a href=&#34;https://cloud.ibm.com/catalog/services/app-id&#34;&gt;IBM Cloud AppID&lt;/a&gt;
as an authentication provider.&lt;/p&gt;
&lt;p&gt;The scenario is a Kubeflow cluster admin configures Kubeflow as a web
application in AppID and manages user authentication with builtin identity
providers (Cloud Directory, SAML, social log-in with Google or Facebook etc.) or
custom providers.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Follow the guide &lt;a href=&#34;https://cloud.ibm.com/docs/appid?topic=appid-getting-started&#34;&gt;Getting started with App ID&lt;/a&gt;
to create an AppID service instance.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Follow the step &lt;a href=&#34;https://cloud.ibm.com/docs/appid?topic=appid-app#app-register&#34;&gt;Registering your app&lt;/a&gt;
to create an application with type &lt;em&gt;regularwebapp&lt;/em&gt; under the provisioned AppID
instance. Make sure the &lt;em&gt;scope&lt;/em&gt; contains &lt;em&gt;email&lt;/em&gt;. Then retrieve the following
configuration parameters from your AppID:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;clientId&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;secret&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;oAuthServerUrl&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Create the namespace &lt;code&gt;istio-system&lt;/code&gt; if not exist:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;kubectl create namespace istio-system
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Create a secret prior to kubeflow deployment by filling parameters from the
step 2 accordingly:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-SHELL&#34; data-lang=&#34;SHELL&#34;&gt;kubectl create secret generic appid-application-configuration -n istio-system &lt;span style=&#34;color:#4e9a06&#34;&gt;\
&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&lt;/span&gt;  --from-literal&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;clientId&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;&amp;lt;clientId&amp;gt; &lt;span style=&#34;color:#4e9a06&#34;&gt;\
&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&lt;/span&gt;  --from-literal&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;secret&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;&amp;lt;secret&amp;gt; &lt;span style=&#34;color:#4e9a06&#34;&gt;\
&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&lt;/span&gt;  --from-literal&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;oAuthServerUrl&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;&amp;lt;oAuthServerUrl&amp;gt; &lt;span style=&#34;color:#4e9a06&#34;&gt;\
&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&lt;/span&gt;  --from-literal&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;oidcRedirectUrl&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;https://&amp;lt;kubeflow-FQDN&amp;gt;/login/oidc
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;&lt;code&gt;&amp;lt;oAuthServerUrl&amp;gt;&lt;/code&gt; - fill in the value of oAuthServerUrl&lt;/li&gt;
&lt;li&gt;&lt;code&gt;&amp;lt;clientId&amp;gt;&lt;/code&gt; - fill in the value of clientId&lt;/li&gt;
&lt;li&gt;&lt;code&gt;&amp;lt;secret&amp;gt;&lt;/code&gt; - fill in the value of secret&lt;/li&gt;
&lt;li&gt;&lt;code&gt;&amp;lt;kubeflow-FQDN&amp;gt;&lt;/code&gt; - fill in the FQDN of Kubeflow, if you don&amp;rsquo;t know yet, just give a dummy one like &lt;code&gt;localhost&lt;/code&gt;. Then change it after you got one.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Notice&lt;/strong&gt;: If any of the parameters changed after Kubeflow deployment, it
will need to manually update these parameters in the secret &lt;code&gt;appid-application-configuration&lt;/code&gt;
then restart authservice by running the command &lt;code&gt;kubectl rollout restart sts authservice -n istio-system&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Setup environment variables:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;export KF_NAME=&amp;lt;your choice of name for the Kubeflow deployment&amp;gt;

# Set the path to the base directory where you want to store one or more 
# Kubeflow deployments. For example, /opt/.
export BASE_DIR=&amp;lt;path to a base directory&amp;gt;

# Then set the Kubeflow application directory for this deployment.
export KF_DIR=${BASE_DIR}/${KF_NAME}
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Setup configuration files:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;export CONFIG_URI=&amp;quot;https://raw.githubusercontent.com/kubeflow/manifests/master/kfdef/kfctl_ibm_multi_user.yaml&amp;quot;
# Generate and deploy Kubeflow:
mkdir -p ${KF_DIR}
cd ${KF_DIR}
kfctl build -V -f ${CONFIG_URI}
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Deploy Kubeflow:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;kfctl apply -V -f ${CONFIG_URI}
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Wait until the deployment finishes successfully. e.g., all pods are in &lt;code&gt;Running&lt;/code&gt; state when running &lt;code&gt;kubectl get pod -n kubeflow&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&#34;verify-mutli-user-installation&#34;&gt;Verify mutli-user installation&lt;/h3&gt;
&lt;p&gt;Check the pod &lt;code&gt;authservice-0&lt;/code&gt; is in running state in namespace &lt;code&gt;istio-system&lt;/code&gt;:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-SHELL&#34; data-lang=&#34;SHELL&#34;&gt;kubectl get pod authservice-0 -n istio-system
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;next-steps&#34;&gt;Next steps&lt;/h2&gt;
&lt;p&gt;Please follow the steps in &lt;a href=&#34;../authentication/#exposing-the-kubeflow-dashboard-with-dns-and-tls-termination&#34;&gt;Exposing the Kubeflow dashboard with DNS and TLS termination&lt;/a&gt; to secure the Kubeflow dashboard with HTTPS, then you will have the required DNS name as Kubeflow FQDN to enable the OIDC flow for AppID:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Follow the step &lt;a href=&#34;https://cloud.ibm.com/docs/appid?topic=appid-managing-idp#add-redirect-uri&#34;&gt;Adding redirect URIs&lt;/a&gt;
to fill a URL for AppID to redirect to Kubeflow. The URL should look like &lt;code&gt;https://&amp;lt;kubeflow-FQDN&amp;gt;/login/oidc&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Update the secret &lt;code&gt;appid-application-configuration&lt;/code&gt; with the updated Kubeflow FQDN to replace &lt;code&gt;&amp;lt;kubeflow-FQDN&amp;gt;&lt;/code&gt; in below command:&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-SHELL&#34; data-lang=&#34;SHELL&#34;&gt;&lt;span style=&#34;color:#000&#34;&gt;redirect_url&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;$(&lt;/span&gt;&lt;span style=&#34;color:#204a87&#34;&gt;printf&lt;/span&gt; https://&amp;lt;kubeflow-FQDN&amp;gt;/login/oidc &lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;|&lt;/span&gt; base64 -w0&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;)&lt;/span&gt; &lt;span style=&#34;color:#4e9a06&#34;&gt;\
&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&lt;/span&gt; kubectl patch secret appid-application-configuration -n istio-system &lt;span style=&#34;color:#4e9a06&#34;&gt;\
&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&lt;/span&gt; -p &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;$(&lt;/span&gt;&lt;span style=&#34;color:#204a87&#34;&gt;printf&lt;/span&gt; &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#39;{&amp;#34;data&amp;#34;:{&amp;#34;oidcRedirectUrl&amp;#34;: &amp;#34;%s&amp;#34;}}&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#000&#34;&gt;$redirect_url&lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ol start=&#34;3&#34;&gt;
&lt;li&gt;restart the pod &lt;code&gt;authservice-0&lt;/code&gt;:&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-SHELL&#34; data-lang=&#34;SHELL&#34;&gt;kubectl rollout restart statefulset authservice -n istio-system
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Then visit &lt;code&gt;https://&amp;lt;kubeflow-FQDN&amp;gt;/&lt;/code&gt;, it should redirect you to AppID for authentication.&lt;/p&gt;
&lt;h2 id=&#34;additional-information&#34;&gt;Additional information&lt;/h2&gt;
&lt;p&gt;You can find general information about Kubeflow configuration in the guide to &lt;a href=&#34;/docs/other-guides/kustomize/&#34;&gt;configuring Kubeflow with kfctl and kustomize&lt;/a&gt;.&lt;/p&gt;

      </description>
    </item>
    
    <item>
      <title>Docs: Securing the Kubeflow authentication with HTTPS</title>
      <link>/docs/ibm/deploy/authentication/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>/docs/ibm/deploy/authentication/</guid>
      <description>
        
        
        &lt;p&gt;This guide describes how to secure the Kubeflow authentication with HTTPS.
You can enable HTTPS for Kubeflow dashboard (and other web UIs) using the
network load balancer (NLB) feature of the IBM Cloud Kubernetes service—choose
the &lt;code&gt;classic&lt;/code&gt; worker nodes provider in the
&lt;a href=&#34;../../create-cluster#setting-environment-variables&#34;&gt;Setting environment variables&lt;/a&gt;
section of the Create an IBM Cloud cluster guide.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt;: For details on NLB, go to the official
&lt;a href=&#34;https://cloud.ibm.com/docs/containers?topic=containers-loadbalancer-about&#34;&gt;Classic: About network load balancers&lt;/a&gt;
guide.&lt;/p&gt;
&lt;h2 id=&#34;prerequisites&#34;&gt;Prerequisites&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Install and configure the
&lt;a href=&#34;https://cloud.ibm.com/docs/cli?topic=cli-getting-started&#34;&gt;IBM Cloud CLI&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Install
&lt;a href=&#34;../install-kubeflow/#multi-user-auth-enabled&#34;&gt;multi-user, auth-enabled Kubeflow&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;setting-up-an-nlb&#34;&gt;Setting up an NLB&lt;/h2&gt;
&lt;p&gt;To set up an NLB for your Kubernetes cluster, follow the official
&lt;a href=&#34;https://cloud.ibm.com/docs/containers?topic=containers-loadbalancer&#34;&gt;Classic: Setting up basic load balancing with an NLB 1.0&lt;/a&gt;
guide. Notice that the setup process for a multi-zone cluster differs from that
of a single-zone cluster. For details, go to
&lt;a href=&#34;https://cloud.ibm.com/docs/containers?topic=containers-loadbalancer#multi_zone_config&#34;&gt;Setting up an NLB 1.0 in a multi-zone cluster&lt;/a&gt;.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;To use the existing Istio ingress gateway (instead of creating a new
service), you need to update the service type of &lt;code&gt;istio-ingressgateway&lt;/code&gt; to
&lt;code&gt;LoadBalancer&lt;/code&gt; from &lt;code&gt;NodePort&lt;/code&gt;. Run the following command:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;kubectl patch svc istio-ingressgateway -n istio-system -p &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#39;{&amp;#34;spec&amp;#34;:{&amp;#34;type&amp;#34;:&amp;#34;LoadBalancer&amp;#34;}}&amp;#39;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Verify that the NLB was created successfully. It might take a few minutes for
the service to be created and an IP address to be made available. Run the
command below and check if you can see the &lt;code&gt;LoadBalancer Ingress&lt;/code&gt; IP address:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;kubectl describe service istio-ingressgateway -n istio-system &lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;|&lt;/span&gt; grep &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;LoadBalancer Ingress&amp;#34;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Store the external IP of the &lt;code&gt;istio-ingressgateway&lt;/code&gt; service in an environment
variable:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span style=&#34;color:#204a87&#34;&gt;export&lt;/span&gt; &lt;span style=&#34;color:#000&#34;&gt;INGRESS_GATEWAY_IP&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;$(&lt;/span&gt;kubectl -n istio-system get service istio-ingressgateway -o &lt;span style=&#34;color:#000&#34;&gt;jsonpath&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#39;{.status.loadBalancer.ingress[0].ip}&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;exposing-the-kubeflow-dashboard-with-dns-and-tls-termination&#34;&gt;Exposing the Kubeflow dashboard with DNS and TLS termination&lt;/h2&gt;
&lt;p&gt;The following instructions use the Kubeflow dashboard as an example. However,
they apply to other web UI applications, since they all go through the Istio
ingress gateway.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Store the Kubernetes cluster name in an environment variable by running the
following command:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span style=&#34;color:#204a87&#34;&gt;export&lt;/span&gt; &lt;span style=&#34;color:#000&#34;&gt;CLUSTER_NAME&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;&amp;lt;cluster_name&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Create a DNS domain and certificates for the IP of the service
&lt;code&gt;istio-ingressgateway&lt;/code&gt; in namespace &lt;code&gt;istio-system&lt;/code&gt;:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;ibmcloud ks nlb-dns create classic --cluster &lt;span style=&#34;color:#000&#34;&gt;$CLUSTER_NAME&lt;/span&gt; --ip &lt;span style=&#34;color:#000&#34;&gt;$INGRESS_GATEWAY_IP&lt;/span&gt; --secret-namespace istio-system
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;List the registered domain names:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;ibmcloud ks nlb-dns ls --cluster &lt;span style=&#34;color:#000&#34;&gt;$CLUSTER_NAME&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Wait until the status of the certificate—the fourth field—of the new domain
name becomes &lt;code&gt;created&lt;/code&gt;. Then, save the value of the column &lt;code&gt;SSL Cert Secret  Name&lt;/code&gt; in environment variables by running these commands (replace
&lt;code&gt;{SECRET_NAME}&lt;/code&gt; with the secret&amp;rsquo;s name as shown in the &lt;code&gt;SSL Cert Secret Name&lt;/code&gt;
column):&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span style=&#34;color:#204a87&#34;&gt;export&lt;/span&gt; &lt;span style=&#34;color:#000&#34;&gt;INGRESS_GATEWAY_SECRET&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;={&lt;/span&gt;SECRET_NAME&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt;: If there is more than one entry in the output, choose the one
that matches the IP address from &lt;code&gt;LoadBalancer Ingress&lt;/code&gt; (step 2) of service
&lt;code&gt;istio-ingressgateway&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Create a secret named &lt;code&gt;istio-ingressgateway-certs&lt;/code&gt; for the
&lt;code&gt;istio-ingressgateway&lt;/code&gt; pods in namespace &lt;code&gt;istio-system&lt;/code&gt;:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;kubectl get secret &lt;span style=&#34;color:#000&#34;&gt;$INGRESS_GATEWAY_SECRET&lt;/span&gt; -o yaml &amp;gt; istio-ingressgateway-certs.yaml
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Update the &lt;code&gt;istio-ingressgateway-certs.yaml&lt;/code&gt; file by changing the value of
&lt;code&gt;metadata.name&lt;/code&gt; to &lt;code&gt;istio-ingressgateway-certs&lt;/code&gt; and the value of
&lt;code&gt;metadata.namespace&lt;/code&gt; to &lt;code&gt;istio-system&lt;/code&gt;. Then, run the following commands:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;kubectl apply -f istio-ingressgateway-certs.yaml -n istio-system
kubectl rollout restart deploy istio-ingressgateway -n istio-system
rm istio-ingressgateway-certs.yaml
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Update the gateway &lt;code&gt;kubeflow-gateway&lt;/code&gt; to expose port &lt;code&gt;443&lt;/code&gt;. Create a resource
file &lt;code&gt;kubeflow-gateway.yaml&lt;/code&gt; as follows by replacing &lt;code&gt;&amp;lt;hostname&amp;gt;&lt;/code&gt; with the value
of the column &lt;code&gt;Hostname&lt;/code&gt; in step 4:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-YAML&#34; data-lang=&#34;YAML&#34;&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;apiVersion&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;networking.istio.io/v1alpha3&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;kind&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;Gateway&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;metadata&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;name&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;kubeflow-gateway&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;namespace&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;kubeflow&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;spec&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;selector&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;istio&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;ingressgateway&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;servers&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;- &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;hosts&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;- &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#39;&amp;lt;hostname&amp;gt;&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;port&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;name&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;https&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;number&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#0000cf;font-weight:bold&#34;&gt;443&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;protocol&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;HTTPS&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;tls&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;mode&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;SIMPLE&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;privateKey&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;/etc/istio/ingressgateway-certs/tls.key&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;serverCertificate&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;/etc/istio/ingressgateway-certs/tls.crt&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Verify that the traffic is routed via HTTPS by using the value of
above-mentioned &lt;code&gt;Hostname&lt;/code&gt; in your browser. It should redirect traffic from an
HTTP address to HTTPS address automatically.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt;: The certificates for the NLB DNS host secret expire every &lt;strong&gt;90&lt;/strong&gt; days.
The secret in the &lt;code&gt;default&lt;/code&gt; namespace is automatically renewed by IBM Cloud
Kubernetes Service 37 days before it expires. After this secret is updated, you
must manually copy it to the &lt;code&gt;istio-ingressgateway-certs&lt;/code&gt; secret by repeating
commands in step 5 and 6.&lt;/p&gt;

      </description>
    </item>
    
    <item>
      <title>Docs: Uninstall Kubeflow</title>
      <link>/docs/ibm/deploy/uninstall-kubeflow/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>/docs/ibm/deploy/uninstall-kubeflow/</guid>
      <description>
        
        
        &lt;p&gt;Uninstall Kubeflow on your IBM Cloud IKS cluster.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# Go to your Kubeflow deployment directory
cd ${KF_DIR}

# Remove Kubeflow
kfctl delete -f ${CONFIG_FILE}
&lt;/code&gt;&lt;/pre&gt;
      </description>
    </item>
    
  </channel>
</rss>
