diff --git a/.gitignore b/.gitignore index 60433d6..fcd56f5 100644 --- a/.gitignore +++ b/.gitignore @@ -9,3 +9,7 @@ pkg/ .idea .skaffold-*.yaml .kubernetes-manifests-*/ +istio-1.*/ +install-istio.sh +mtls.yaml +istio.yaml \ No newline at end of file diff --git a/README.md b/README.md index b34dbf6..be43f70 100644 --- a/README.md +++ b/README.md @@ -212,35 +212,28 @@ by deploying the [release manifest](./release) directly to an existing cluster. --istio-config=auth=MTLS_PERMISSIVE ``` - > NOTE: If you need to enable `MTLS_STRICT` mode, you will need to update - > several manifest files: - > - > - `kubernetes-manifests/frontend.yaml`: delete "livenessProbe" and - > "readinessProbe" fields. - > - `kubernetes-manifests/loadgenerator.yaml`: delete "initContainers" field. - -1. (Optional) Enable Stackdriver Tracing/Logging with Istio Stackdriver Adapter +2. (Optional) Enable Stackdriver Tracing/Logging with Istio Stackdriver Adapter by [following this guide](https://cloud.google.com/istio/docs/istio-on-gke/installing#enabling_tracing_and_logging). -1. Install the automatic sidecar injection (annotate the `default` namespace +3. Install the automatic sidecar injection (annotate the `default` namespace with the label): ```sh kubectl label namespace default istio-injection=enabled ``` -1. Apply the manifests in [`./istio-manifests`](./istio-manifests) directory. +4. Apply the manifests in [`./istio-manifests`](./istio-manifests) directory. (This is required only once.) ```sh kubectl apply -f ./istio-manifests ``` -1. Deploy the application with `skaffold run --default-repo=gcr.io/[PROJECT_ID]`. +5. Deploy the application with `skaffold run --default-repo=gcr.io/[PROJECT_ID]`. -1. Run `kubectl get pods` to see pods are in a healthy and ready state. +6. Run `kubectl get pods` to see pods are in a healthy and ready state. -1. Find the IP address of your Istio gateway Ingress or Service, and visit the +7. Find the IP address of your Istio gateway Ingress or Service, and visit the application. ```sh diff --git a/release/kubernetes-manifests.yaml b/release/kubernetes-manifests.yaml index 975ff6e..05621a8 100644 --- a/release/kubernetes-manifests.yaml +++ b/release/kubernetes-manifests.yaml @@ -199,6 +199,8 @@ spec: metadata: labels: app: frontend + annotations: + sidecar.istio.io/rewriteAppHTTPProbers: "true" spec: containers: - name: server @@ -444,23 +446,27 @@ spec: metadata: labels: app: loadgenerator + annotations: + sidecar.istio.io/rewriteAppHTTPProbers: "true" spec: terminationGracePeriodSeconds: 5 restartPolicy: Always - initContainers: - - name: wait-frontend - image: alpine:3.6 - command: ['sh', '-c', 'set -x; apk add --no-cache curl && - until timeout -t 2 curl -f "http://${FRONTEND_ADDR}"; do - echo "waiting for http://${FRONTEND_ADDR}"; - sleep 2; - done;'] - env: - - name: FRONTEND_ADDR - value: "frontend:80" + # initContainers: + # - name: wait-frontend + # image: alpine:3.6 + # command: ['sh', '-c', 'set -x; apk add --no-cache curl && + # until timeout -t 2 curl -f "http://${FRONTEND_ADDR}"; do + # echo "waiting for http://${FRONTEND_ADDR}"; + # sleep 2; + # done;'] + # env: + # - name: FRONTEND_ADDR + # value: "frontend:80" containers: - name: main - image: gcr.io/google-samples/microservices-demo/loadgenerator:v0.1.2 +# image: gcr.io/google-samples/microservices-demo/loadgenerator:v0.1.2 + image: gcr.io/megandemo/loadgen:failcurl + imagePullPolicy: Always env: - name: FRONTEND_ADDR value: "frontend:80" diff --git a/src/loadgenerator/Dockerfile b/src/loadgenerator/Dockerfile index af7fa10..cdd89d4 100644 --- a/src/loadgenerator/Dockerfile +++ b/src/loadgenerator/Dockerfile @@ -15,4 +15,7 @@ COPY --from=builder /install /usr/local COPY . . RUN chmod +x ./loadgen.sh +RUN apt-get -qq update \ + && apt-get install -y --no-install-recommends \ + curl ENTRYPOINT ./loadgen.sh diff --git a/src/loadgenerator/loadgen.sh b/src/loadgenerator/loadgen.sh index 2a33434..9f7a15e 100755 --- a/src/loadgenerator/loadgen.sh +++ b/src/loadgenerator/loadgen.sh @@ -18,10 +18,19 @@ set -e trap "exit" TERM -if [[ -z "${FRONTEND_ADDR}" ]]; then +if [ -z "${FRONTEND_ADDR}" ]; then echo >&2 "FRONTEND_ADDR not specified" exit 1 fi set -x + +# if one request to the frontend fails, then exit +STATUSCODE=$(curl --silent --output /dev/stderr --write-out "%{http_code}" http://${FRONTEND_ADDR}) +if test $STATUSCODE -ne 200; then + echo "Error: cannot reach frontend, exiting" + exit 1 +fi + +# else, run loadgen locust --host="http://${FRONTEND_ADDR}" --no-web -c "${USERS:-10}" 2>&1