localhost in pods on kubernetes

6/29/2018

I am trying to use Cypress to test a React application inside a Kubernetes Pod. I made two Containers inside the Pod. One for React application and one for the > Cypress test tool Docker specification of the application is :

FROM node:9-slim AS app
ENV PORT 3000
EXPOSE 3000

COPY . /usr/src/app
WORKDIR /usr/src/app
RUN npm install react --save
RUN npm install ajv --save
CMD ["npm", "start"]

and for the cypress

FROM cypress/base AS cypress
COPY . /test
WORKDIR /test
RUN npm i --save-dev cypress
RUN npm install ajv --save-dev

CMD $(npm bin)/cypress run --record --key 92213f49-6b80-47d5-bbef-2422f308ebf1 -s ./cypress/integration/SystemTest.js

the Kubernetes pod spesification

apiVersion: v1
kind: Pod
metadata:
   name: productlib-pod
spec: 
  restartPolicy: Never
  containers:
     - name: app-container
       image: steinko/app-productlib:1

     - name: cypress-container
       image: steinko/cypress-productlib:1

I execute the commands in the build script

-  docker login -u steinko -p DavidBowie1!

    -  docker  build  -t steinko/app-productlib:1 -f Dockerfile.app .
    -  docker  push steinko/app-productlib:1

    -  docker build -t steinko/cypress-productlib:1 -f Dockerfile.cypress .
    -  docker push steinko/cypress-productlib:1

    -  kubectl apply -f pod.yaml 

I get an error that the cypress so not find the localhost:3000 What is missing?

It looks like this is your first time using Cypress: 3.0.1

[13:08:43]  Verifying Cypress can run /root/.cache/Cypress/3.0.1/Cypress [started] [13:08:46]  Verified Cypress!       /root/.cache/Cypress/3.0.1/Cypress [title changed] [13:08:46]  Verified Cypress!       /root/.cache/Cypress/3.0.1/Cypress [completed]

Opening Cypress...

================================================================================

  (Run Starting)



┌────────────────────────────────────────────────────────────────────────────┐  
│ Cypress:  3.0.1│ Browser:  Electron 59 (headless)                                           │  
│ Specs:    1 found (SystemTest.js)                                          │  
│ Searche…  cypress/integration/SystemTest.js                                │  
│ Run URL:  https://dashboard.cypress.io/#/projects/rwxp3c/runs/609└────────────────────────────────────────────────────────────────────────────┘  



────────────────────────────────────────────────────────────────────────────────
                                                                                   Running: SystemTest.js...                                            (1 of 1) 


  Spesifies client behaivior
    1) should diapley hello world in div
    ✓ should be true (64ms)


  1 passing (1m)   1 failing

  1) Spesifies client behaivior should diapley hello world in div:
     CypressError: Timed out after waiting '60000ms' for your remote page to load.

Your page did not fire its 'load' event within '60000ms'.

You can try increasing the 'pageLoadTimeout' value in 'cypress.json' to wait longer.

Browsers will not fire the 'load' event until all stylesheets and scripts are done downloading.

When this 'load' event occurs, Cypress will continue running commands.
      at Object.cypressErr (http://localhost:42219/__cypress/runner/cypress_runner.js:67929:11)
      at Object.throwErr (http://localhost:42219/__cypress/runner/cypress_runner.js:67894:18)
      at Object.throwErrByPath (http://localhost:42219/__cypress/runner/cypress_runner.js:67921:17)
      at timedOutWaitingForPageLoad (http://localhost:42219/__cypress/runner/cypress_runner.js:58198:17)
      at http://localhost:42219/__cypress/runner/cypress_runner.js:58807:18
      at tryCatcher (http://localhost:42219/__cypress/runner/cypress_runner.js:7091:23)
      at http://localhost:42219/__cypress/runner/cypress_runner.js:2408:41
      at tryCatcher (http://localhost:42219/__cypress/runner/cypress_runner.js:7091:23)
      at Promise._settlePromiseFromHandler (http://localhost:42219/__cypress/runner/cypress_runner.js:5113:31)
      at Promise._settlePromise (http://localhost:42219/__cypress/runner/cypress_runner.js:5170:18)
      at Promise._settlePromise0 (http://localhost:42219/__cypress/runner/cypress_runner.js:5215:10)
      at Promise._settlePromises (http://localhost:42219/__cypress/runner/cypress_runner.js:5290:18)
      at Async._drainQueue (http://localhost:42219/__cypress/runner/cypress_runner.js:2023:16)
      at Async._drainQueues (http://localhost:42219/__cypress/runner/cypress_runner.js:2033:10)
      at Async.drainQueues (http://localhost:42219/__cypress/runner/cypress_runner.js:1907:14)
      at <anonymous>




  (Results)

┌───────────────────────────────────┐
│ Tests:        2│ Passing:      1│ Failing:      1│ Pending:      0│ Skipped:      0│ Screenshots:  1│ Video:        true                │
│ Duration:     1 minute, 0 seconds │
│ Spec Ran:     SystemTest.js       │
└───────────────────────────────────┘


  (Screenshots)

  - /test/cypress/screenshots/Spesifies client behaivior -- should diapley hello world in div.png (1280x720)


  (Video)

  - Started processing:   Compressing to 32 CRF
  - Compression progress:  45%
  - Compression progress:  91%
  - Finished processing:  /test/cypress/videos/SystemTest.js.mp4 (22 seconds)


  (Uploading Results)

  - Done Uploading (1/2) /test/cypress/screenshots/Spesifies client behaivior -- should diapley hello world in div.png
  - Done Uploading (2/2) /test/cypress/videos/SystemTest.js.mp4

================================================================================

  (Run Finished)


      Spec                                    Tests  Pass…  Fail…  Pend…  Skip…



┌────────────────────────────────────────────────────────────────────────────┐
│ ✖ SystemTest.js                   01:00      2      1      1      -     -  │
└────────────────────────────────────────────────────────────────────────────┘

    1 of 1 failed (100%)              01:00      2      1      1      -      -  


───────────────────────────────────────────────────────────────────────────────────   
                                                                                Recorded Run: https://dashboard.cypress.io/#/projects/rwxp3c/runs/609
-- stein korsveien
docker
kubernetes
node.js
npm

2 Answers

7/2/2018

I would recommend you to check application health.

Add the third container with Ubuntu to your pod:

apiVersion: v1
kind: Pod
metadata:
   name: productlib-pod
spec: 
  restartPolicy: Never
  containers:
     - name: app-container
       image: steinko/app-productlib:1

     - name: cypress-container
       image: steinko/cypress-productlib:1

     - name: ubuntu
       image: ubuntu
       args: [bash, -c, 'apt-get update && apt-get -y install curl less net-tools && while true ; do sleep 1000; done']

Wait until packages in Ubuntu are installed:

$ kubectl logs productlib-pod ubuntu

<skipped>
Updating certificates in /etc/ssl/certs...
0 added, 0 removed; done.
Running hooks in /etc/ca-certificates/update.d...
done.

Execute bash in ubuntu container:

$ kubectl exec -ti productlib-pod -c ubuntu -- bash

Check if the port 3000 is in LISTEN state:

root@productlib-pod# netstat -anl

If so, try to connect to it using curl:

root@productlib-pod# curl http://localhost:3000

This way you can ensure the application is able to respond to requests on port 3000.

-- VAS
Source: StackOverflow

6/29/2018

You should set the port exposed by your container on your Pod definition. Something like:

    ports:
    - containerPort: 3000
      protocol: 'TCP'

Att.

-- Quintiliano
Source: StackOverflow