Code Monkey home page Code Monkey logo

app-identity-and-access-adapter's Introduction

App Identity and Access Adapter for Istio Mixer

IBM Cloud powered Travis Coverage Status

GithubWatch GithubStars GithubForks

Note: This project is deprecated and is no longer supported officially. Please see Multicloud apps with Istio documentation for more details. Adapter's docker image been removed from docker hub. If you want continue using you can clone the repository and maintain your own version of the image. The repository contains all the necessary scripts to make the migration easy. You can find the CD scripts in the bin directory. You will also have to point the helm chart to the new image repository.

By using the App Identity and Access adapter, you can centralize all of your identity management using any OIDC compliant identity provider. Because enterprises use clouds from multiple providers or a combination of on and off-premise solutions, heterogenous deployment models can help you to preserve existing infrastructure and avoid vendor lock-in. The adapter can be configured to work with any OIDC compliant identity provider, which enables it to control authentication and authorization policies in all environments including frontend and backend applications. And, it does it all without any change to your code or the need to redeploy your application.

Multicloud Architecture

A multicloud computing environment combines multiple cloud and/ or private computing environments into a single network architecture. By distributing workloads across multiple environments, you might find improved resiliency, flexibility, and greater cost-efficiency. To achieve the benefits, it's common to use a container-based applications with an orchestration layer, such as Kubernetes.

App Identity and Access adapter architecture diagram Figure. Multicloud deployment achieved with the App Identity and Access adapter.

Note: Due to an Istio limitation, the App Identity and Access adapter currently stores user session information internally and does not persist the information across replicas or over failover configurations. When using the adapter, limit your workloads to a single replica until the limitation is addressed.

Understanding Istio and the adapter

Istio is an open source service mesh that layers transparently onto existing distributed applications that can integrate with Kubernetes. To reduce the complexity of deployments Istio provides behavioral insights and operational control over the service mesh as a whole. When App ID is combined with Istio, it becomes a scalable, integrated identity solution for multicloud architectures that does not require any custom application code changes. For more information, check out "What is Istio?".

Istio uses an Envoy proxy sidecar to mediate all inbound and outbound traffic for all services in the service mesh. By using the proxy, Istio extracts information about traffic, also known as telemetry, that is sent to the Istio component called Mixer to enforce policy decisions. The App Identity and Access adapter extends the Mixer functionality by analyzing the telemetry (attributes) against custom policies to control identity and access management into and across the service mesh. The access management policies are linked to particular Kubernetes services and can be finely tuned to specific service endpoints. For more information about policies and telemetry, see the Istio documentation.

Protecting frontend apps

If you're using a browser based application, you can use the Open ID Connect (OIDC) / OAuth 2.0 authorization_grant flow to authenticate your users. When an unauthenticated user is detected, they are automatically redirected to the authentication page. When the authentication completes, the browser is redirected to an implicit /oidc/callback endpoint where the adapter intercepts the request. At this point, the adapter obtains tokens from the identity provider and then redirects the user back to their originally requested URL.

To view the user session information including the session tokens, you can look in the Authorization header.

Authorization: Bearer <access_token> <id_token>

You can also logout authenticated users. When an authenticated user accesses any protected endpoint with oidc/logout appended as shown in the following example, they are logged out.

https://myhost/path/oidc/logout

If needed, a refresh token can be used to automatically acquire new access and identity tokens without your user's needing to re-authenticate. If the configured identity provider returns a refresh token, it is persisted in the session and used to retrieve new tokens when the identity token expires.

Protecting backend apps

The adapter can be used in collaboration with the OAuth 2.0 JWT Bearer flow to protect service APIs by validating JWT Bearer tokens. The Bearer authorization flow expects a request to contain an Authorization header with a valid access token and an optional identity token. The expected header structure is Authorization=Bearer {access_token} [{id_token}]. Unauthenticated clients are returned an HTTP 401 response status with a list of the scopes that are needed to obtain authorization. If the tokens are invalid or expired, the API strategy returns an HTTP 401 response with an optional error component that says Www-Authenticate=Bearer scope="{scope}" error="{error}".

For more information about tokens and how they're used, see understanding tokens.

Installation and usage

You can install the Adapter by using the accompanying Helm chart. You can configure the chart to match the needs of your project.

Before you begin

Before you get started, be sure you have the following prerequisites installed.

You can also use the IBM Cloud Kubernetes Service Managed Istio.

Installing the Adapter

To install the chart, initialize Helm in your cluster, define the options that you want to use, and then run the install command.

  1. If you're working with IBM Cloud Kubeneretes service, be sure to login and set the context for your cluster.

  2. Enable Istio Policy Enforcement

  3. Install Helm in your cluster.

    helm init

You might want to configure Helm to use --tls mode. For help with enabling TLS, check out the Helm repository. If you enable TLS, be sure to append --tls to every Helm command that you run. For more information about using Helm with IBM Cloud Kubernetes Service, see Adding services by using Helm Charts.

  1. Install the chart.

    $ helm repo add appidentityandaccessadapter https://raw.githubusercontent.com/ibm-cloud-security/app-identity-and-access-adapter/master/helm/appidentityandaccessadapter
    $ helm install --name appidentityandaccessadapter appidentityandaccessadapter/appidentityandaccessadapter

Helm lets you specify an image tag during installation with the set image.tag flag. For example, helm install --name appidentityandaccessadapter appidentityandaccessadapter/appidentityandaccessadapter --set image.tag=0.5.0

The chart can also be installed locally. First clone this repo by git clone [email protected]:ibm-cloud-security/app-identity-and-access-adapter.git, then install the chart helm install ./helm/appidentityandaccessadapter --name appidentityandaccessadapter.

Applying an authorization and authentication policy

An authentication or authorization policy is a set of conditions that must be met before a request can access a resource access. By defining an identity provider's service configuration and an access policy that outlines when a particular access control flow should be used, you can control access to any resource in your service mesh.

To see example CRD's, check out the samples directory.

Defining a Configuration

Depending on whether you're protecting frontend or backend applications, create a policy configuration with one of the following options.

  • For frontend applications: Browser based applications that require user authentication can be configured to use the OIDC / OAuth 2.0 authentication flow. To define an OidcConfig CRD containing the client used to facilitate the authentication flow with the Identity provider, use the following example as a guide.

    kind: OidcConfig
    metadata:
        name: oidc-provider-config
        namespace: sample-namespace
    spec:
        discoveryUrl: https://us-south.appid.cloud.ibm.com/oauth/v4/71b34890-a94f-4ef2-a4b6-ce094aa68092/oidc-discovery/.well-known
        clientId: 1234-abcd-efgh-4567
        clientSecret: randomlyGeneratedClientSecret
        clientSecretRef:
            name: <name-of-my-kube-secret>
            key: <key-in-my-kube-secret>
    
    Field Type Required Description
    discoveryUrl string yes A well-known endpoint that contains a JSON document of OIDC/OAuth 2.0 configuration information.
    clientId string yes An identifier for the client that is used for authentication.
    clientSecret string *no A plain text secret that is used to authenticate the client. If not provided, a clientSecretRef must exist.
    clientSecretRef object no A reference secret that is used to authenticate the client. This can be used in place of the clientSecret.
    clientSecretRef.name string yes The name of the Kubernetes Secret that contains the clientSecret.
    clientSecretRef.key string yes The field within the Kubernetes Secret that contains the clientSecret.
    scopes array[string] no The scopes to request (openid profile email by default).
  • For backend applications: The OAuth 2.0 Bearer token spec defines a pattern for protecting APIs by using JSON Web Tokens (JWTs). Using the following configuration as an example, define a JwtConfig CRD that contains the public key resource, which is used to validate token signatures.

    apiVersion: "security.cloud.ibm.com/v1"
    kind: JwtConfig
    metadata:
        name: samplejwtpolicy
        namespace: sample-app
    spec:
        jwksUrl: https://us-south.appid.cloud.ibm.com/oauth/v4/oauth/v4/71b34890-a94f-4ef2-a4b6-ce094aa68092/publickeys
    

Registering application endpoints

Register application endpoints within a Policy CRD to validate incoming requests and enforce authentication rules. Each Policy applies exclusively to the Kubernetes namespace in which the object lives and can specify the services, paths, and methods that you want to protect.

apiVersion: "security.cloud.ibm.com/v1"
kind: Policy
metadata:
  name:      samplepolicy
  namespace: sample-app
spec:
  targets:
    -
      serviceName: <svc-sample-app>
      paths:
        - exact: /web/home
          method: ALL
          policies:
            - policyType: oidc
              config: <oidc-provider-config>
              rules:
                - claim: scope
                  match: ALL
                  source: access_token
                  values:
                    - appid_default
                    - openid
                - claim: amr
                  match: ANY
                  source: id_token
                  values:
                    - cloud_directory
                    - google

        - exact: /web/user
          method: GET
          policies:
            - policyType: oidc
              config: <oidc-provider-config>
              redirectUri: https://github.com/ibm-cloud-security/app-identity-and-access-adapter
        - prefix: /
          method: ALL
          policies:
            -
              policyType: jwt
              config: <jwt-config>
Service Object Type Required Description
serviceName string yes The name of Kubernetes service in the Policy namespace that you want to protect.
paths array[Path Object] yes A list of path objects that define the endpoints that you want to protect. If left empty, all paths are protected.
Path Object Type Required Description
exact or prefix string yes The path that you want to apply the policies on. Options include exact and prefix. exact matches the provides endpoints exactly with the last / trimmed. prefix matches the endpoints that begin with the route prefix that you provide.
method enum no The HTTP method protected. Valid options ALL, GET, PUT, POST, DELETE, PATCH - Defaults to ALL:
policies array[Policy] no The OIDC/JWT policies that you want to apply.
Policy Object Type Required Description
policyType enum yes The type of OIDC policy. Options include: jwt or oidc.
config string yes The name of the provider config that you want to use.
redirectUri string no The url you want the user to be redirected after successful authentication, default: the original request url.
rules array[Rule] no The set of rules the you want to use for token validation.
Rule Object Type Required Description
claim string yes The claim that you want to validate.
match enum no The criteria required for claim validation. Options include: ALL, ANY or NOT. The default is set to ALL.
source enum no The token where you want to apply the rule. Options include: access_token or id_token. The default is set to access_token.
values array[string] yes The required set of values for validation.

Deleting the adapter

To remove the adapter and all of the associated CRDs, you must delete the Helm chart and the associated signing and encryption keys.

helm delete --purge appidentityandaccessadapter
kubectl delete secret appidentityandaccessadapter-keys -n istio-system

FAQ and troubleshooting

If you encounter an issue while working with the App Identity and Access adapter, consider the following FAQ's and troubleshooting techniques. For more help, You can ask questions through a forum or open a support ticket. When you are using the forums to ask a question, tag your question so that it is seen by the App ID development team.

  • If you have technical questions about App ID, post your question on Stack Overflow and tag your question with "ibm-appid".
  • For questions about the service and getting started instructions, use the dW Answers forum. Include the appid tag.

For more information about getting support, see how do I get the support that I need.

Troubleshooting: Logging

By default, logs are styled as JSON and provided at an info visibility level to provide for ease of integration with external logging systems. To update the logging configuration, you can use the Helm chart. Supported logging levels include range -1 - 7 as shown in Zapcore. For more information about the levels, see the Zapcore documentation.

When you're manually viewing JSON logs, you might want to tail the logs and "pretty print" them by using jq.

Adapter

To see the adapter logs, you can use kubectl or access the pod from the appidentityandaccessadapter pod from the Kubernetes console.

$ alias adapter_logs="kubectl -n istio-system logs -f $(kubectl -n istio-system get pods -lapp=appidentityandaccessadapter -o jsonpath='{.items[0].metadata.name}')"
$ adapter_logs | jq

Mixer

If the adapter does not appear to receive requests, check the Mixer logs to ensure that it is successfully connected to the adapter.

$ alias mixer_logs="kubectl -n istio-system logs -f $(kubectl -n istio-system get pods -lapp=telemetry -o jsonpath='{.items[0].metadata.name}') -c mixer"
$ mixer_logs | jq

License

This package contains code licensed under the Apache License, Version 2.0 (the "License"). You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 and may also view the License in the LICENSE file within this package.

app-identity-and-access-adapter's People

Contributors

devstein avatar erika-grine avatar icemann92 avatar ishangulhane avatar kimmytaft avatar sandmman avatar smguilia avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

app-identity-and-access-adapter's Issues

[Question]: adapter is deprecated?

This is more of a question than an issue.

I'm currently evaluating this adopter to protect my web applications deployed to Istio and I see that app-identity-and-access-adopter is currently listed as deprecated on Istio Docs. Wondering if that's a mistake as this repo is being maintained actively.

Restrict RBAC

In the current cluster-role-binding, the default ServiceAccount in the istio-system is given the cluster-admin role. Why is this necessary? What are the RBAC permissions required by the App Identity and Access Adapter?

How to get Auth token to be used by my frontend?

Hello,

I tried the sample application (node) and it's working fine.
I'm even able to extract the keycloak auth token as cookie from the authorization header with an envoy filter.
Now, I'm in the phase of experimenting with the adapter with angular js. Authorization bearer header is unfortunately no longer available and I can't find a solution to extract the auth token.

Any help please?
Thanks

Redirect fails when authorization_endpoint url has query parameter

If the authorization endpoint returned from the discovery url already contains query parameters, the adapter redirects to a wrong url.

The url for the redirect request is ?client_id=3ca7d73e-e7f4-4d7d-87a9-b001588280bb&redirect_uri=https%3A... (only query paramters, no base url) which eventually errors out with ERR_TOO_MANY_REDIRECTS.

This is a problem when using Azure B2C because the B2C policy name needs to be provided by a query parameter:

e.g.
"authorization_endpoint": "https://xxx.b2clogin.com/xxx.onmicrosoft.com/oauth2/v2.0/authorize?p=b2c_1_susi",

invalid_grant: Incorrect redirect_uri

I've been researching the App Identity and Access Adapter for the frontend OIDC client needs of a custom REST service running within Istio. I've read through a blog post(https://istio.io/blog/2019/app-identity-and-access-adapter/) and the README file however, I've not been successful in my attempts to implement the adapter in my POC environment using Keycloak as the OIDC Provider.

When the adapter is not running I'm able to access my REST service with no problem. Once my OidcConfig and app Policy are applied, I'm correctly redirected for authN credentials however after login and redirection the browser shows the error:

UNAUTHENTICATED:handler-appidentityandaccessadapter.handler.istio-system:invalid_grant: Incorrect redirect_uri

Logs from the dpl-appidentityandaccessadapter pod show:

{"level":"info","ts":"2020-02-26T15:18:59.055Z","caller":"policy/policy.go:69","msg":"Type: oidc","source":"appidentityandaccessadapter-adapter"}
{"level":"info","ts":"2020-02-26T15:18:59.055Z","caller":"adapter/adapter.go:71","msg":"Executing OIDC policies","source":"appidentityandaccessadapter-adapter"}
{"level":"info","ts":"2020-02-26T15:18:59.103Z","caller":"authserver/authserver.go:162","msg":"Failed to retrieve tokens","source":"appidentityandaccessadapter-adapter","error":"invalid_grant: Incorrect redirect_uri"}
{"level":"info","ts":"2020-02-26T15:18:59.103Z","caller":"web/web.go:294","msg":"OIDC callback: Could not retrieve tokens","source":"appidentityandaccessadapter-adapter","error":"invalid_grant: Incorrect redirect_uri","client_name":"poc-namespace/poc-oidc-provider-config"}
{"level":"info","ts":"2020-02-26T15:18:59.254Z","caller":"policy/policy.go:69","msg":"Type: oidc","source":"appidentityandaccessadapter-adapter"}
{"level":"info","ts":"2020-02-26T15:18:59.254Z","caller":"adapter/adapter.go:71","msg":"Executing OIDC policies","source":"appidentityandaccessadapter-adapter"}
{"level":"info","ts":"2020-02-26T15:18:59.406Z","caller":"policy/policy.go:69","msg":"Type: oidc","source":"appidentityandaccessadapter-adapter"}
{"level":"info","ts":"2020-02-26T15:18:59.406Z","caller":"adapter/adapter.go:71","msg":"Executing OIDC policies","source":"appidentityandaccessadapter-adapter"}
{"level":"info","ts":"2020-02-26T15:18:59.415Z","caller":"authserver/authserver.go:162","msg":"Failed to retrieve tokens","source":"appidentityandaccessadapter-adapter","error":"unknown_error"}
{"level":"info","ts":"2020-02-26T15:18:59.415Z","caller":"web/web.go:294","msg":"OIDC callback: Could not retrieve tokens","source":"appidentityandaccessadapter-adapter","error":"unknown_error","client_name":"poc-namespace/poc-oidc-provider-config"}

I've applied the following OidcConfig and Policy declarations:

---
apiVersion: "security.cloud.ibm.com/v1"
kind: OidcConfig
metadata:
    name: poc-oidc-provider-config
spec:
    authMethod: client_secret_basic
    discoveryUrl: 'https://auth.<domain>/auth/realms/<realm>/.well-known/openid-configuration'
    clientId: 'poc-app'
    clientSecret: '<client secret>'
---
apiVersion: "security.cloud.ibm.com/v1"
kind: Policy
metadata:
  name: poc-policy
spec:
  targets:
    - serviceName: poc-app
      paths:
      - method: ALL
        policies:
          - policyType: oidc
            config: poc-oidc-provider-config
            rules:
              - claim: scope
                match: ALL
                source: access_token
                values:
                  - openid
                  - profile
                  - email

I've exhausted google searches and tweaked redirect_url settings on the Keycloak side - but I cannot seem to find further information how to resolve this error.

GCP, OIDC and IBM ISAM

Hello,

I am trying to configure this adapter in istio in a GKE cluster and using IBM ISAM as my IDP. I tried many things and I am stuck in "Unauthorized - rules configured for opaque access token","client_name":"default/oidc-provider-config". Can you help me?

{"level":"info","ts":"2020-06-03T05:21:20.434Z","caller":"policy/policy.go:69","msg":"Type: oidc","source":"appidentityandaccessadapter-adapter"}
{"level":"info","ts":"2020-06-03T05:21:20.434Z","caller":"adapter/adapter.go:71","msg":"Executing OIDC policies","source":"appidentityandaccessadapter-adapter"}
{"level":"info","ts":"2020-06-03T05:21:33.561Z","caller":"policy/policy.go:69","msg":"Type: oidc","source":"appidentityandaccessadapter-adapter"}
{"level":"info","ts":"2020-06-03T05:21:33.561Z","caller":"adapter/adapter.go:71","msg":"Executing OIDC policies","source":"appidentityandaccessadapter-adapter"}
{"level":"warn","ts":"2020-06-03T05:21:39.289Z","caller":"validator/validator.go:172","msg":"Unauthorized - rules configured for opaque access token","source":"appidentityandaccessadapter-adapter"}
{"level":"info","ts":"2020-06-03T05:21:39.289Z","caller":"web/web.go:303","msg":"OIDC callback: Access token failed validation","source":"appidentityandaccessadapter-adapter","error":"invalid_request: Unauthorized - rules configured for opaque access token","client_name":"default/oidc-provider-config"}

Adding HA support

Note: Due to an Istio limitation, the App Identity and Access adapter currently stores user session information internally and does not persist the information across replicas or over failover configurations. When using the adapter, limit your workloads to a single replica until the limitation is addressed.

Regarding the note above, could you elaborate a little bit on this Istio limitation? We're evaluating this adapter at the moment, however running a single instance of it on a multi-tenant cluster makes it a bit risky for us.

That said, we would like to discuss more about the mitigation strategies for this problem and see if there is any help that we can provide.

Okta Error

Using the config below:

apiVersion: "security.cloud.ibm.com/v1"
kind: OidcConfig
metadata:
    name: my-oidc-provider-config
    namespace: kubeflow
spec:
    discoveryUrl: https://<org>.okta.com/oauth2/default/.well-known/openid-configuration
    clientId: <client_id>
    clientSecret: <client_secret>

Okta gives this error back:

Cannot supply multiple client credentials. Use one of the following: credentials in the Authorization header, credentials in the post body, or a client_assertion in the post body.

Is this a know issue?

Bug: Helm chart fails to install in latest Helm versions due to nil set at adapter Description

Symptom:

when executing

helm install appidentityandaccessadapter/appidentityandaccessadapter --generate-name

It fails the installation with the following prompt error:

error validating data: unknown object type "nil" in adapter.spec.description

How to reproduce it:

Pre-requisites:

$ helm version
version.BuildInfo{Version:"v3.2.4", GitCommit:"0ad800ef43d3b826f31a5ad8dfbb4fe05d143688", GitTreeState:"clean", GoVersion:"go1.13.12"}

$ kubectl version
istClient Version: version.Info{Major:"1", Minor:"18", GitVersion:"v1.18.5", GitCommit:"e6503f8d8f769ace2f338794c914a96fc335df0f", GitTreeState:"clean", BuildDate:"2020-07-04T15:01:15Z", GoVersion:"go1.14.4", Compiler:"gc", Platform:"darwin/amd64"}
Server Version: version.Info{Major:"1", Minor:"17", GitVersion:"v1.17.7", GitCommit:"e9496a9e13aa91e0fba8ae9b83ca9d61ee2bde36", GitTreeState:"clean", BuildDate:"2020-09-17T06:35:47Z", GoVersion:"go1.13.9", Compiler:"gc", Platform:"linux/amd64"}

$ istioctl version
client version: 1.6.4
control plane version: 1.7.1
data plane version: 1.7.1 (5 proxies)

Steps from this guide:

helm repo add appidentityandaccessadapter https://raw.githubusercontent.com/ibm-cloud-security/app-identity-and-access-adapter/master/helm/appidentityandaccessadapter

helm install --name appidentityandaccessadapter appidentityandaccessadapter/appidentityandaccessadapter

Expected Result:

Installation finishes with success message

Failed to list *v1.Policy: the server could not find the requested resource (get policies.security.cloud.ibm.com)

Hello, we've had this adapter deployed for quite a while now, and it's always worked very well. However, we've hit an issue in the past few days.

In this Istio appid adapter (appidentityandaccessadapter) we are seeing a lot of log file entries like this:

E0825 11:30:13.242798 1 reflector.go:125] pkg/mod/k8s.io/[email protected]/tools/cache/reflector.go:98: Failed to list *v1.Policy: the server could not find the requested resource (get policies.security.cloud.ibm.com)

And when I try to do a deployment via a helm chart I am seeing this error

Error: unable to build kubernetes objects from release manifest: unable to recognize "": no matches for kind "Policy" in version "security.cloud.ibm.com/v1"

We updated kubernetes to version v1.16.14+IKS recently.

Anyone got any clues as to how I can fix this?

Invalid discoveryUrl Causes Confusing Too Many Redirects Error

We are evaluating the app-identity-and-access-adapter and I am trying to deploy it to Minkube to test it out; however, I am getting an infinite redirect loop at the implicit /oidc/callback endpoint (ERR_TOO_MANY_REDIRECTS). I imagine the adapter is not intercepting the request correctly. Any idea what could be going wrong? Is this a configuration issue or an issue specific to Minikube? See my manifests below.

I am using the latest Minikube and Istio versions.

---
apiVersion: "security.cloud.ibm.com/v1"
kind: OidcConfig
metadata:
  name: oidc-provider-config
spec:
  discoveryUrl: *******
  clientId: ********
  clientSecret: **********
---
apiVersion: "security.cloud.ibm.com/v1"
kind: Policy
metadata:
  name: samplepolicy
spec:
  targets:
    -
      serviceName: httpbin
      paths:
        - exact: /headers
          method: ALL
          policies:
            - policyType: oidc
              config: oidc-provider-config
              redirectUri: "https://github.com/ibm-cloud-security/app-identity-and-access-adapter"
# httpbin for testing
---
apiVersion: v1
kind: ServiceAccount
metadata:
  name: httpbin
---
apiVersion: v1
kind: Service
metadata:
  name: httpbin
  labels:
    app: httpbin
spec:
  ports:
  - name: http
    port: 8000
    targetPort: 80
  selector:
    app: httpbin
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: httpbin
spec:
  replicas: 1
  selector:
    matchLabels:
      app: httpbin
      version: v1
  template:
    metadata:
      labels:
        app: httpbin
        version: v1
    spec:
      serviceAccountName: httpbin
      containers:
      - image: docker.io/kennethreitz/httpbin
        imagePullPolicy: IfNotPresent
        name: httpbin
        ports:
        - containerPort: 80
apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
  name: httpbin-gateway
spec:
  selector:
    istio: ingressgateway # use Istio default gateway implementation
  servers:
  - port:
      number: 80
      name: http
      protocol: HTTP
    hosts:
    - "*"
---
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: httpbin
spec:
  hosts:
  - "*"
  gateways:
  - httpbin-gateway
  http:
  - match:
    - uri:
        prefix: /
    route:
    - destination:
        port:
          number: 8000
        host: httpbin

Failed to pull image "ibmcloudsecurity/app-identity-and-access-adapter:0.5.0

Hello,

I'm facing an issue while trying to download app-identity-and-access-adapter:0.5.0 image , any idea how to fix this

Kubernetes version EKS V1.15

Warning  Failed     19s (x4 over 106s)  kubelet, ip-10-1-136-8.eu-west-3.compute.internal  Failed to pull image "ibmcloudsecurity/app-identity-and-access-adapter:0.5.0": rpc error: code = Unknown desc = Error response from daemon: pull access denied for ibmcloudsecurity/app-identity-and-access-adapter, repository does not exist or may require 'docker login': denied: requested access to the resource is denied

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.