Sample cloud-native application with 10 microservices showcasing Kubernetes, Istio, gRPC and OpenCensus.

Online Boutique

Continuous Integration

Online Boutique is a cloud-native microservices demo application. Online Boutique consists of a 10-tier microservices application. The application is a web-based e-commerce app where users can browse items, add them to the cart, and purchase them.

Google uses this application to demonstrate use of technologies like Kubernetes/GKE, Istio, Stackdriver, gRPC and OpenCensus. This application works on any Kubernetes cluster, as well as Google Kubernetes Engine. It’s easy to deploy with little to no configuration.

If you’re using this demo, please ★Star this repository to show your interest!

👓 Note to Googlers: Please fill out the form at go/microservices-demo if you are using this application.

Looking for the old Hipster Shop frontend interface? Use the manifests in release v0.1.5.

Screenshots

Home Page Checkout Screen
Screenshot of store homepage Screenshot of checkout screen

Quickstart (GKE)

Open in Cloud Shell

  1. Create a Google Cloud Platform project or use an existing project. Set the PROJECT_ID environment variable and ensure the Google Kubernetes Engine and Cloud Operations APIs are enabled.
PROJECT_ID="<your-project-id>"
gcloud services enable container.googleapis.com --project ${PROJECT_ID}
gcloud services enable monitoring.googleapis.com \
    cloudtrace.googleapis.com \
    clouddebugger.googleapis.com \
    cloudprofiler.googleapis.com \
    --project ${PROJECT_ID}
  1. Clone this repository.
git clone https://github.com/GoogleCloudPlatform/microservices-demo.git
cd microservices-demo
  1. Create a GKE cluster.
ZONE=us-central1-b
gcloud container clusters create onlineboutique \
    --project=${PROJECT_ID} --zone=${ZONE} \
    --machine-type=e2-standard-2 --num-nodes=4
  1. Deploy the sample app to the cluster.
kubectl apply -f ./release/kubernetes-manifests.yaml
  1. Wait for the Pods to be ready.
kubectl get pods

After a few minutes, you should see:

NAME                                     READY   STATUS    RESTARTS   AGE
adservice-76bdd69666-ckc5j               1/1     Running   0          2m58s
cartservice-66d497c6b7-dp5jr             1/1     Running   0          2m59s
checkoutservice-666c784bd6-4jd22         1/1     Running   0          3m1s
currencyservice-5d5d496984-4jmd7         1/1     Running   0          2m59s
emailservice-667457d9d6-75jcq            1/1     Running   0          3m2s
frontend-6b8d69b9fb-wjqdg                1/1     Running   0          3m1s
loadgenerator-665b5cd444-gwqdq           1/1     Running   0          3m
paymentservice-68596d6dd6-bf6bv          1/1     Running   0          3m
productcatalogservice-557d474574-888kr   1/1     Running   0          3m
recommendationservice-69c56b74d4-7z8r5   1/1     Running   0          3m1s
redis-cart-5f59546cdd-5jnqf              1/1     Running   0          2m58s
shippingservice-6ccc89f8fd-v686r         1/1     Running   0          2m58s
  1. Access the web frontend in a browser using the frontend's EXTERNAL_IP.
kubectl get service frontend-external | awk '{print $4}'

Example output - do not copy

EXTERNAL-IP
<your-ip>

Note- you may see <pending> while GCP provisions the load balancer. If this happens, wait a few minutes and re-run the command.

  1. [Optional] Clean up:
gcloud container clusters delete onlineboutique \
    --project=${PROJECT_ID} --zone=${ZONE}

Other Deployment Options

Architecture

Online Boutique is composed of 11 microservices written in different languages that talk to each other over gRPC. See the Development Principles doc for more information.

Architecture of microservices

Find Protocol Buffers Descriptions at the ./pb directory.

Service Language Description
frontend Go Exposes an HTTP server to serve the website. Does not require signup/login and generates session IDs for all users automatically.
cartservice C# Stores the items in the user's shopping cart in Redis and retrieves it.
productcatalogservice Go Provides the list of products from a JSON file and ability to search products and get individual products.
currencyservice Node.js Converts one money amount to another currency. Uses real values fetched from European Central Bank. It's the highest QPS service.
paymentservice Node.js Charges the given credit card info (mock) with the given amount and returns a transaction ID.
shippingservice Go Gives shipping cost estimates based on the shopping cart. Ships items to the given address (mock)
emailservice Python Sends users an order confirmation email (mock).
checkoutservice Go Retrieves user cart, prepares order and orchestrates the payment, shipping and the email notification.
recommendationservice Python Recommends other products based on what's given in the cart.
adservice Java Provides text ads based on given context words.
loadgenerator Python/Locust Continuously sends requests imitating realistic user shopping flows to the frontend.

Features

  • Kubernetes/GKE: The app is designed to run on Kubernetes (both locally on "Docker for Desktop", as well as on the cloud with GKE).
  • gRPC: Microservices use a high volume of gRPC calls to communicate to each other.
  • Istio: Application works on Istio service mesh.
  • OpenCensus Tracing: Most services are instrumented using OpenCensus trace interceptors for gRPC/HTTP.
  • Cloud Operations (Stackdriver): Many services are instrumented with Profiling, Tracing and Debugging. In addition to these, using Istio enables features like Request/Response Metrics and Context Graph out of the box. When it is running out of Google Cloud, this code path remains inactive.
  • Skaffold: Application is deployed to Kubernetes with a single command using Skaffold.
  • Synthetic Load Generation: The application demo comes with a background job that creates realistic usage patterns on the website using Locust load generator.

Local Development

If you would like to contribute features or fixes to this app, see the Development Guide on how to build this demo locally.

Demos featuring Online Boutique


This is not an official Google project.

Comments
  • Kustomize build CI + Kustomize docs + `ServiceAccounts` variation

    Kustomize build CI + Kustomize docs + `ServiceAccounts` variation

    • Kustomize build CI for smoke tests as soon as files are updated in kustomize/ folder - Same approach as #1096 but for Kustomize
      • First, testing the default kustomization.yaml file in kustomize/
      • Second, testing each component individually under kustomize/components
      • Thirst, and last, testing a custom scenario with base and some components
    • Do not trigger current CI on each PR or merge in main if files are updated in kustomize/ folder to avoid charging the self-hosted runner as well as avoid building/deploying the containers, all of that not related to the Kustomize implementation in this repo as of now
    • Just one kubernetes-manifests.yaml in kustomize/base folder, like in release/
    • Update the release script/process to copy the release/kubernetes-manifests.yaml file in kustomize/base/kubernetes-manifests.yaml
    • Update the REDIS_ADDR value update for the Memorystore component (a Redis instance could have a port after the IP and it could also be a DNS instead of IP). Here, I'm proposing that any Kustomize component which needs to have value injection (sed) in their Kustomize component file is surrounded by {{...}}, in this case {{REDIS_ADDR}}. That's the only component for now having this, so that's kind of a token convention for future components which will need that in the future.
    • Add new ServiceAccounts variation via Kustomize
    • Lastly, update the docs for consistency between the Kustomize variations
  • Problem with 3 microservices during app deployment

    Problem with 3 microservices during app deployment

    After clone this repository, deployed the sample app to the cluster using the command mentioned kubectl apply -f ./release/kubernetes-manifests.yaml

    But when I am running the command to check the status of the pod, observing that 3 services are not running: 1.cartservice 2.loadgenerator 3.recommendationservice

    Also to access the web frontend, when I run the command kubectl get service frontend-external, it is showing like this.

    Can you please suggest why the 3 services are not running and why the frontend-external service is not returning external ip please. Tnx

    image

  • feat: Implement Terraform code to automate Online Boutique GKE quickstart

    feat: Implement Terraform code to automate Online Boutique GKE quickstart

    This Pull Request introduces a new Terraform module that automates Online Boutique's GKE quickstart process.

    Background

    Online Boutique (microservices-demo) is a sample web application that simulates a web-based e-commerce application for users to browse items, add them to cart, and purchase them. The sample application demonstrates using an 11-tier microservices application deployed using Kubernetes/GKE.

    Currently, the microservices-demo repo contains instructions in the Quickstart (GKE) section on how to deploy the sample application on your own GCP project. The process requires many intermediate steps with varying processing time in between each step. The usage of an incoming Terraform module will simplify all of the Quickstart steps into one Terraform command and combine the individual processing times into one waiting period for the user.

    Summary of Changes

    1. New File: main.tf This file contains the main Terraform script instructions. When running the script, the script will be executing the following actions:

    1. Enable the required Google APIs outlined in "Quickstart (GKE)"
    2. Create an autopilot GKE cluster and point kubectl at the new cluster (get-credentials)
    3. Apply the kubernetes manifest file in release/kubernetes-manifests.yaml
    4. Wait on all the Pods to be ready

    2. New File: variables.tf This file contains variables that may need customization in future projects. These variables include "apis", "cluster name", "cluster region", "Pods namespace", and "Kubernetes manifest filepath".

    3. New File: output.tf This file contains output variables that are shown after running the Terraform script. These variables include "location of the cluster" and "name of the cluster".

    4. New File: README.md This file contains detailed instructions on how to setup, run, and destroy the Terraform script.

    Testing Procedure

    Refer to the instructions in the terraform/README.md file. This file contains instructions of setting up and using the Terraform file. Link to README: https://github.com/GoogleCloudPlatform/microservices-demo/blob/7d2517ef8f1e9cfbfd110e855bc801081988eb45/terraform/README.md

  • Kustomize variation to deploy Online Boutique apps without the `grpc-health-probe` bin

    Kustomize variation to deploy Online Boutique apps without the `grpc-health-probe` bin

    • Support native gRPC Healthcheck for livenessProbe and readinessProbe since GKE 1.24.
    • Partially implementing #662 (following up on first experimental tests documented here #849)
      • "Partially" because it won't be yet by default, not all GKE versions support that, just 1.24+. So it will be an optional Kustomize variation that users would be able to leverage if they want.
    • Size of the images got -3.9MB (virtual) / -10.9MB (on disk)
    • loadgenerator and frontend are not impacted by that (not gRPC apis/apps)
    • Adding 3 more Kustomize variations related to this one:
      • container-images-registry (not needed, but similar to the one below)
      • container-images-tag (not needed, but similar to the one below)
      • container-images-tag-suffix (needed for this new Kustomize variation)
    • Review the setup of tokens to avoid issues with Kustomize and bash session
    • Update the release process (more precisely make-docker-images.sh) in order to build a second image next to the default/official one by adding a prefix -native-grpc-probes.
    • These -native-grpc-probes images are not built at every PR nor merge into main, they are only built during the release process.
    • Added those new Kustomize variations in the Smoke test in CI, with some sed examples too

    Tests realized on a GKE 1.24 now available on rapid channel:

    gcloud container clusters create tests \
        --zone=us-central1-b \
        --machine-type=e2-standard-2 \
        --num-nodes=4 \
        --release-channel=rapid
    

    Build the containers for all the Online Boutique apps with the -native-grpc-probes image tag, you can leverage the script here.

    Then, deploy this like:

    cd kustomize/
    SUFFIX=-native-grpc-probes
    sed -i "s/CONTAINER_IMAGES_TAG_SUFFIX/$SUFFIX/g" components/container-images-tag-suffix/kustomization.yaml
    kustomize edit add component components/container-images-tag-suffix
    kustomize edit add component components/native-grpc-health-check
    kubectl kustomize . | sed "s/$SUFFIX$SUFFIX/$SUFFIX/g" | kubectl apply -f
    

    Note: for this variation, kubectl apply -k . won't work because there is a known issue currently in Kustomize where the tagSuffix is duplicated. The command lines above are a temporary workaround.

    We won't make this the default configuration yet, GKE 1.24 is the default version for the rapid channel. We need to make the choice in the future when this configuration will be the default ones. GKE just got 1.24 in rapid channel in 2022-08-12 and is planned to have its end of life on 2023-09-30. So it's 1 year from now. Will it be a good time then, after 2023-09-30?

  • cartservice crashes on start when Istio 1.1 proxy injection is enabled

    cartservice crashes on start when Istio 1.1 proxy injection is enabled

    Using Istio 1.1.0-rc.0 from dockerhub. When proxy injection is enabled, cartservice fails to start.

    Here is what I see in the cartservice logs, though I'm not sure if that's the real problem or some red herring:

     textPayload:  "StackExchange.Redis.RedisConnectionException: It was not possible to connect to the redis server(s); to create a disconnected multiplexer, disable AbortOnConnectFail. ProtocolFailure on PING
       at StackExchange.Redis.ConnectionMultiplexer.ConnectImpl(Func`1 multiplexerFactory, TextWriter log) in c:\code\StackExchange.Redis\StackExchange.Redis\StackExchange\Redis\ConnectionMultiplexer.cs:line 890
       at cartservice.cartstore.RedisCartStore.EnsureRedisConnected() in /app/cartstore/RedisCartStore.cs:line 79
       at cartservice.cartstore.RedisCartStore.InitializeAsync() in /app/cartstore/RedisCartStore.cs:line 60
       at cartservice.Program.<>c__DisplayClass4_0.<<StartServer>b__0>d.MoveNext() in /app/Program.cs:line 54
    
  • Export traces to Jaeger if installed

    Export traces to Jaeger if installed

    (This came up in #108 and I believe some work is already happening.)

    I'd love to have the demo app export traces to a local Jaeger installation ideally with minimal to no config changes.

    I'm not sure how we can detect a jaeger installation uniformly and register it as an exporter (that works alongside with Stackdriver exporter) in multiple languages.

    cc: @rghetia

  • cleanup: add region tags to yaml and sh

    cleanup: add region tags to yaml and sh

    Background

    Adding region tags to our yaml and shell files. Allows for our team to leverage internal tools!

    Fixes

    n/a

    Change Summary

    Added region tags. Snippet-bot will add a comment below of the tags added (and where). Tags are gke_... and servicemesh_...

    Additional Notes

    Since there were no existing region tags in this repo, we don't have to worry about any internal references to tags (ie no existing code widgets!) Also please note that this update will take a couple hours or more to reflect internally.

    Testing Procedure

    n/a

    Related PRs or Issues

    n/a

  • Online Boutique's Helm chart

    Online Boutique's Helm chart

    Online Boutique's Helm chart - https://github.com/GoogleCloudPlatform/microservices-demo/issues/1319.

    You can render the hydrated/generated manifests of this Helm chart from its associated folder:

    cd helm-chart
    helm template .
    

    Or via the manually pushed remote Helm chart:

    helm template oci://us-docker.pkg.dev/online-boutique-ci/charts/onlineboutique
    

    You can do the same with both for installing it in your cluster:

    cd helm-chart
    helm upgrade onlineboutique . --install
    

    Or:

    helm upgrade onlineboutique oci://us-docker.pkg.dev/online-boutique-ci/charts/onlineboutique --install
    

    Action items:

    • [X] Create the Helm chart Online Boutique
    • [X] Manually push the Helm chart in Artifact Registry
      • cd helm-chart && helm package . && helm push onlineboutique-0.4.2.tgz oci://us-docker.pkg.dev/online-boutique-ci/charts
    • [X] Tests
    • [x] Reviews
    • [x] Script to push the Helm chart in GAR in the release process
  • Docs: Update Online Boutique README files with Kustomize Changes

    Docs: Update Online Boutique README files with Kustomize Changes

    Background

    Recently there have been several PRs that have been merged into the Online Boutique sample app repository that introduce Terraform automated deployment, Kustomize, and other deployment variations.

    PR Links:

    • https://github.com/GoogleCloudPlatform/microservices-demo/pull/918
    • https://github.com/GoogleCloudPlatform/microservices-demo/pull/937
    • https://github.com/GoogleCloudPlatform/microservices-demo/pull/949

    With these new deployment options, there is a need for Online Boutique documentation to reflect the updated changes. This PR introduces the necessary documentation updates to relevant markdown files in the repo.

    Change Summary

    • README.md - Included an Automated Deployment section pointing users to terraform/README.md. These instructions introduce the Terraform (one-click) deployment for Online Boutique's vanilla Quickstart (GKE) process.
    • kustomize/README.md - Updated with general Kustomize information and deployment information. Included general deployment instructions and additional instructions required for Memorystore.
    • docs/cymbal-shops.md & docs/gcp-instrumentation.md - Included an Automated Deployment section pointing users to kustomize/README.md.
    • docs/memorystore.md - Updated docs to point users at the Automated Deployment steps in kustomize/README.md. Edited the existing manual deployment steps to an optional manual infrastructure steps section.
  • Add Cloud Armor in front of this deployed demo

    Add Cloud Armor in front of this deployed demo

    Document the way to setup Cloud Armor in front of the public endpoint of this demo onlineboutique.dev.

    What's in this PR:

    • Document the steps do deploy the release-cluster part with more automation with gcloud
    • Add BackendConfig to bind Cloud Armor to the Ingress
    • Add FrontendConfig to bind the SSL Policy and redirect http to https
    • Update Ingress's apiVersion from apiVersion: networking.k8s.io/v1beta1 to networking.k8s.io/v1 to avoid future breaking change because deprecation with GKE 1.22
    • Remove the frontend-nodeport.yaml because it's not anymore a requirement, the default ClusterIP one is sufficient/working now.
    • To avoid to have another Public IP, do a kubectl delete svc frontend-external in the process too
    • Not related, fix a typo in the Memorystore (redis) doc.

    Next steps:

    • [X] Test on a personal GKE cluster (see comment below with details information about the tests)
    • [x] Validate with the team about their thoughts and feedback
    • [x] If validated, apply this to onlineboutique.dev
    • [ ] Eventually, port this to BoA too, to be consistent
  • Update UI for the Cymbal Shops Rebrand

    Update UI for the Cymbal Shops Rebrand

    See the "What needs to be done?" section of #574.

    Change Summary

    • This pull-request updates all pages of "Online Boutique".
    • This pull-request applies UI changes from the new Figma prototypes (only accessible to Googlers with a Figma subscription) for the new "Cymbal Shops" redesign.

    Additional Notes

    • Changes related to the Cymbal Shops logo and the product list update will happen in a different pull-request.
    • This designs from this pull-request will be reviewed by the Google Cloud Demos and Experiments team designers.
  • chore(deps): update terraform google to v4.47.0

    chore(deps): update terraform google to v4.47.0

    Mend Renovate

    This PR contains the following updates:

    | Package | Type | Update | Change | |---|---|---|---| | google (source) | required_provider | minor | 4.46.0 -> 4.47.0 |


    Release Notes

    hashicorp/terraform-provider-google

    v4.47.0

    Compare Source

    NOTES:

    • sql: fixed an issue where google_sql_database was abandoned by default as of version 4.45.0. Users who have upgraded to 4.45.0 or 4.46.0 will see a diff when running their next terraform apply after upgrading this version, indicating the deletion_policy field's value has changed from "ABANDON" to "DELETE". This will create a no-op call against the API, but can otherwise be safely applied. (#​13226)

    FEATURES:

    • New Resource: google_alloydb_backup (#​13202)
    • New Resource: google_filestore_backup (#​13209)

    IMPROVEMENTS:

    • bigtable: added deletion_protection field to google_bigtable_table (#​13232)
    • compute: made google_compute_subnetwork.ipv6_access_type field updatable in-place (#​13211)
    • container: added auto_provisioning_defaults.cluster_autoscaling.upgrade_settings in google_container_cluster (#​13199)
    • container: added gateway_api_config block to google_container_cluster resource for supporting the gke gateway api controller (#​13233)
    • container: promoted gke_backup_agent_config in google_container_cluster to GA (#​13223)
    • container: promoted min_cpu_platform in google_container_cluster to GA (#​13199)
    • datacatalog: added update support for fields in google_data_catalog_tag_template (#​13216)
    • iam: Added plan-time validation for IAM members (#​13203)
    • logging: added bucket_name field to google_logging_metric (#​13210)
    • logging: made metric_descriptor field optional for google_logging_metric (#​13225)

    BUG FIXES:

    • composer: fixed a crash when updating ip_allocation_policy of google_composer_environment (#​13188)
    • sql: fixed an issue where google_sql_database was abandoned by default as of version 4.45.0. Users who have upgraded to 4.45.0 or 4.46.0 will see a diff when running their next terraform apply after upgrading this version, indicating the deletion_policy field's value has changed from "ABANDON" to "DELETE". This will create a no-op call against the API, but can otherwise be safely applied. (#​13226)

    Configuration

    📅 Schedule: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

    🚦 Automerge: Enabled.

    Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

    🔕 Ignore: Close this PR and you won't be reminded about this update again.


    • [ ] If you want to rebase/retry this PR, check this box

    This PR has been generated by Mend Renovate. View repository job log here.

  • Clarify meaning of

    Clarify meaning of "Googler"

    Background

    • See https://github.com/GoogleCloudPlatform/microservices-demo/issues/1437.
      • A non-Googler was wondering why the link go/microservices-demo wasn't working for them.
    • We should clarify what "Googler" means (for non-Googlers).

    Fixes

    https://github.com/GoogleCloudPlatform/microservices-demo/issues/1437

    Change Summary

    • Clarify that "Googler" means "Googler employee".
  • chore(deps): update dependency grpc.aspnetcore to v2.51.0

    chore(deps): update dependency grpc.aspnetcore to v2.51.0

    Mend Renovate

    This PR contains the following updates:

    | Package | Type | Update | Change | |---|---|---|---| | Grpc.AspNetCore | nuget | minor | 2.50.0 -> 2.51.0 |


    Release Notes

    grpc/grpc-dotnet

    v2.51.0

    What's Changed

    Full Changelog: https://github.com/grpc/grpc-dotnet/compare/v2.51.0-pre1...v2.51.0


    Configuration

    📅 Schedule: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

    🚦 Automerge: Enabled.

    Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

    🔕 Ignore: Close this PR and you won't be reminded about this update again.


    • [ ] If you want to rebase/retry this PR, check this box

    This PR has been generated by Mend Renovate. View repository job log here.

  • "Error: json: unknown field \"components\"\n"

    Describe the bug

    Get errors when run skaffold run, follows this document https://github.com/GoogleCloudPlatform/microservices-demo/blob/main/docs/development-guide.md

    To Reproduce

    do exactly the same as the document, using kind.

    Logs

    Starting test...
    running [kubectl --context  kustomize /home/ubuntu/microservices-demo/kubernetes-manifests]
     - stdout: ""
     - stderr: "Error: json: unknown field \"components\"\n"
     - cause: exit status 1
    
    

    Screenshots

    image

    Environment

    OS: Ubuntu 20.04 Kubernetes distribution, version: kind v0.17.0 go1.19.2 linux/amd64

  • Unable to build adservice

    Unable to build adservice

    Describe the bug

    build [adservice] failed: exit status 1. Docker build ran into internal error. Please retry.

    To Reproduce

    Logs

    Generating tags...

    • productcatalogservice -> productcatalogservice:v0.5.0-30-gb2ef53f
    • recommendationservice -> recommendationservice:v0.5.0-30-gb2ef53f
    • shippingservice -> shippingservice:v0.5.0-30-gb2ef53f
    • checkoutservice -> checkoutservice:v0.5.0-30-gb2ef53f
    • paymentservice -> paymentservice:v0.5.0-30-gb2ef53f
    • currencyservice -> currencyservice:v0.5.0-30-gb2ef53f
    • cartservice -> cartservice:v0.5.0-30-gb2ef53f
    • frontend -> frontend:v0.5.0-30-gb2ef53f
    • adservice -> adservice:v0.5.0-30-gb2ef53f
    • loadgenerator -> loadgenerator:v0.5.0-30-gb2ef53f Checking cache...
    • emailservice: Not found. Building
    • productcatalogservice: Not found. Building
    • recommendationservice: Not found. Building
    • shippingservice: Found Locally
    • checkoutservice: Found Locally
    • paymentservice: Found Locally
    • currencyservice: Found Locally
    • cartservice: Found Locally
    • frontend: Found Locally
    • adservice: Not found. Building
    • loadgenerator: Found Locally Starting build... Found [minikube] context, using local docker daemon. Building [adservice]... Target platforms: [linux/amd64] #1 [internal] load build definition from Dockerfile #1 sha256:4fd7c5b169637ade6dc46fa79f5ebe497faea8466f82e301c0fc5d1799fe1763 #1 transferring dockerfile: 38B done #1 DONE 0.0s

    #2 [internal] load .dockerignore #2 sha256:3a3376a110bfc911c611e7778255bed1a6fcc5f12331b0f88bd3f8a17922905e #2 transferring context: 2B done #2 DONE 0.0s

    #4 [internal] load metadata for docker.io/library/eclipse-temurin:19@sha256:17e3d3b61ca4a7606490f596feb77f69980939fecacf91a1f13ea7b17147058f #4 sha256:fa4367848242f6486a2e5650a6e73e7b59134bc9cb3dc1bc2d5c9165b8260a0c #4 DONE 0.0s

    #3 [internal] load metadata for docker.io/library/eclipse-temurin:19.0.1_10-jre-alpine@sha256:1aa167ab4f1498130e04bed5d6a83fed23c1fd8e3df8589723bc876770dd6a3a #3 sha256:095a08a5e87c0f08ca7fe08671a1bd8b85fa3840a51991c36774312eb5e5a0c7 #3 DONE 0.0s

    #9 [builder 1/9] FROM docker.io/library/eclipse-temurin:19@sha256:17e3d3b61ca4a7606490f596feb77f69980939fecacf91a1f13ea7b17147058f #9 sha256:e6598a80b4806e6f96c6639d605cf4c6eca4174e9d77b4bae443fffb1f2dcc2c #9 DONE 0.0s

    #11 [internal] load build context #11 sha256:14ea7f78c196e3fc2a5c4cafe5ae47a5c9c8babae792578ef62a0fb5a60e3aaf #11 transferring context: 840B done #11 DONE 0.0s

    #13 [builder 4/9] COPY gradle gradle #13 sha256:fdaeb43ef35a139a2ecd1cead76d33dfdf08ec928d056377bb6d0e4fa7ba5adc #13 CACHED

    #10 [builder 2/9] WORKDIR /app #10 sha256:c8376895fb2b0a3b0283686ae8db694693504e2b0084b35d3dad35064057b43b #10 CACHED

    #12 [builder 3/9] COPY [build.gradle, gradlew, ./] #12 sha256:83c710fc667545608bfc816075122245e3b257bcc1277345bb9b3282cfe1fefe #12 CACHED

    #14 [builder 5/9] RUN chmod +x gradlew #14 sha256:1a500f6f159b665ab926871cb66d0e20677a0a5f0b055537bcd781f6c6395e61 #14 CACHED

    #5 [without-grpc-health-probe-bin 1/5] FROM docker.io/library/eclipse-temurin:19.0.1_10-jre-alpine@sha256:1aa167ab4f1498130e04bed5d6a83fed23c1fd8e3df8589723bc876770dd6a 3a #5 sha256:3ec4fd675030cb4080679827d76012c9836cfa8e143f949ed6cf49b3d748d907 #5 resolve docker.io/library/eclipse-temurin:19.0.1_10-jre-alpine@sha256:1aa167ab4f1498130e04bed5d6a83fed23c1fd8e3df8589723bc876770dd6a3a done #5 sha256:bfba53c59e931f5d57c41ba291b90b1ab7e3034d4df5a30ba2ff56f63583beef 0B / 161B 0.2s #5 sha256:1aa167ab4f1498130e04bed5d6a83fed23c1fd8e3df8589723bc876770dd6a3a 1.16kB / 1.16kB done #5 sha256:0fdafb034be2a2cb5ed98aa1b8116b05184efb869e1d7026bb395dc7f7be8f50 4.22kB / 4.22kB done #5 sha256:d8e5acd5897d762b9a83758d4ceae374df7b8b0367a48cc14b8a00e33998b3bf 0B / 12.02MB 0.2s #5 sha256:b231e5a3c8c25582f722e10270be76c230ecdb668b26782fe0b4cd29037021c6 0B / 49.14MB 0.2s #5 CANCELED

    #15 [builder 6/9] RUN ./gradlew downloadRepos #15 sha256:3997494df4830672a9af711404a7be3af2e05bafbda5e4154acd7d8958e0c28e #15 0.366 /bin/sh: 1: ./gradlew: not found #15 ERROR: executor failed running [/bin/sh -c ./gradlew downloadRepos]: exit code: 127

    [builder 6/9] RUN ./gradlew downloadRepos:


    executor failed running [/bin/sh -c ./gradlew downloadRepos]: exit code: 127 Building [productcatalogservice]... Target platforms: [linux/amd64] Build [productcatalogservice] was canceled Building [emailservice]... Target platforms: [linux/amd64] Build [emailservice] was canceled Building [recommendationservice]... Target platforms: [linux/amd64] Build [recommendationservice] was canceled build [adservice] failed: exit status 1. Docker build ran into internal error. Please retry. If this keeps happening, please open an issue..

    Screenshots

    Environment

    • OS: Windows 10 (Run on WSL 2)
    • Kubernetes distribution, version: minikube version: v1.28.0
    • Any relevant tool version: Docker Desktop v4.15.0

    Additional context

    Exposure

Istio - An open platform to connect, manage, and secure microservices

Istio An open platform to connect, manage, and secure microservices. For in-dept

Jan 5, 2022
Online Boutique: a cloud-native microservices demo application

This is an application forked from the GCP Microservice demo. Online Boutique is

Jan 5, 2022
Automatic Service Mesh and RPC generation for Go micro services, it's a humble alternative to gRPC with Istio.
Automatic Service Mesh and RPC generation for Go micro services, it's a humble alternative to gRPC with Istio.

Mesh RPC MeshRPC provides automatic Service Mesh and RPC generation for Go micro services, it's a humble alternative to gRPC with Istio. In a nutshell

Aug 22, 2022
goTempM is a full stack Golang microservices sample application built on top of the Micro platform.
goTempM is a full stack Golang microservices sample application built on top of the Micro platform.

goTempM is a full stack Golang microservices sample application built on top of the Micro platform.

Sep 24, 2022
Box is an incrementally adoptable tool for building scalable, cloud native, microservices.

Box is a tool for building scalable microservices from predefined templates. Box is currently in Beta so if you find any issues or have some ideas

Feb 3, 2022
Create production ready microservices mono repo pattern wired with Neo4j. Microservices for other languages and front end repos to be added as well in future.
Create production ready microservices mono repo pattern wired with Neo4j. Microservices for other languages and front end repos to be added as well in future.

Create Microservices MonoRepo in GO/Python Create a new production-ready project with backend (Golang), (Python) by running one CLI command. Focus on

Oct 26, 2022
Elastic Stack Docker + Sample Go AppElastic Stack Docker + Sample Go App
Elastic Stack Docker + Sample Go AppElastic Stack Docker + Sample Go App

?? Elastic Stack Docker + Sample Go App Test Elastic Stack which includes Elasticsearch, Kibana, Filebeat and Metricbeat. It comes with a very simple

Jan 14, 2022
This is demo / sample / example project using microservices architecture for Online Food Delivery App.

Microservices This is demo / sample / example project using microservices architecture for Online Food Delivery App. Architecture Services menu-servic

Nov 21, 2022
Go-kit-microservices - Example microservices implemented with Go Kit

Go Kit Microservices Example microservices implemented with go kit, a programmin

Jan 18, 2022
Dubbo2istio watches Dubbo ZooKeeper registry and synchronize all the dubbo services to Istio.
Dubbo2istio watches Dubbo ZooKeeper registry and synchronize all the dubbo services to Istio.

Dubbo2Istio Dubbo2istio 将 Dubbo ZooKeeper 服务注册表中的 Dubbo 服务自动同步到 Istio 服务网格中。 Aeraki 根据 Dubbo 服务信息和用户设置的路由规则生成数据面相关的配置,通过 Istio 下发给数据面 Envoy 中的 Dubbo p

Dec 1, 2022
Cloud-native and easy-to-use application management platform | 云原生且易用的应用管理平台
Cloud-native and easy-to-use application management platform | 云原生且易用的应用管理平台

Website • Documentation What is NEW! August 24, 2020 ,Rainbond 5.2 Stable version is officially released View Release Rainbond Introduction Cloud nati

Dec 29, 2022
Todolist microservice with Istio

Todo 服务 环境依赖 docker-desktop >= 4.2.0 kubernetes >= 1.21.5 go >= 1.17 istioctl >= 1.11.4 protobuf >= 3.17.3 grpcurl >= 1.8.5 下载安装 Docker Desktop ,并启动内置

Feb 20, 2022
Go microservices with REST, and gRPC using BFF pattern.
Go microservices with REST, and gRPC using BFF pattern.

Go microservices with REST, and gRPC using BFF pattern. This repository contains backend services. Everything is dockerized and ready to

Jan 4, 2023
TinyHat.Me: Microservices deployed with Kubernetes that enable users to propose hat pictures and try on hats from a user-curated database.
TinyHat.Me: Microservices deployed with Kubernetes that enable users to propose hat pictures and try on hats from a user-curated database.

Click here to see the "buggy" version ?? The Scenario TinyHat.Me is an up and coming startup that provides an API to allow users to try on tiny hats v

Jun 17, 2022
gRPC to JSON proxy generator following the gRPC HTTP spec
gRPC to JSON proxy generator following the gRPC HTTP spec

The gRPC-Gateway is a plugin of the Google protocol buffers compiler protoc. It reads protobuf service definitions and generates a reverse-proxy server which translates a RESTful HTTP API into gRPC. This server is generated according to the google.api.http annotations in your service definitions.

Jan 3, 2023
Sample full stack micro services application built using the go-Micro framework.
Sample full stack micro services application built using the go-Micro framework.

goTemp goTemp is a full stack Golang microservices sample application built using go-micro. The application is built as a series of services that prov

Dec 26, 2022
Example golang microservices deployed on kubernetes.
Example golang microservices deployed on kubernetes.

Tech Stack Golang RabbitMQ Docker K8S MongoDB Services There are two services which communicate via http(sync) and rabbitmq(async). Services opened to

Sep 6, 2022
Trying to build an Ecommerce Microservice in Golang and Will try to make it Cloud Native - Learning Example extending the project of Nic Jackson

Golang Server Project Best Practices Dependency Injection :- In simple words, we want our functions and packages to receive the objects they depend on

Nov 28, 2022
CudeX: a cloud native intelligent operation and maintenance engine that provides service measurement, index quantification
CudeX: a cloud native intelligent operation and maintenance engine that provides service measurement, index quantification

简介 CudgX是星汉未来推出的面向云原生时代的AIOps智能运维引擎,它通过各类服务的多维度、大数据量的数据收集及机器学习训练分析,对各种服务进行指标化、数字

Oct 13, 2022