diff --git a/README b/README index 9dc7050..868acde 100644 --- a/README +++ b/README @@ -22,9 +22,9 @@ Run: play ~run -# Production Operation Info (OpenShift) +# Production Operation Info (GKE) -Deployment is via Redhat's Openshift Online cluster. +Deployment is via Google Kubernetes Engine. ### Docker image and deploying @@ -34,42 +34,15 @@ We use the sbt-native plugin to produce a docker image. **Note**: This defaults to stage (which is not set up currently) - prod should be done from CI, but if really wanted you can set the repository override via an environment variable `export DOCKER_REPOSITORY=registry.pro-us-east-1.openshift.com/reactivemanifesto-website` -Once you have a docker image you can upload it to your openshift registry. There are a number of ways to do this, so you may need to check your documentation. +Once you have a docker image you can upload it to cloudsmith. There are a number of ways to do this, so you may need to check your documentation. Currently that mechanism is to deploy the local image to Lightbend's internal repo. You will need to make sure that you have access and will require both the username and password (or contact internal-it@lightbend.com). -NOTE: You'll need to install the `oc` CLI, which can be accessed from https://console.pro-us-east-1.openshift.com/console/command-line +Then push: -First login to `oc`: +`docker push docker.cloudsmith.io/lightbend/internal-registry/website-manifesto:latest` -`oc login https://api.pro-us-east-1.openshift.com -u USERNAME -p PASSWORD` +### GKE Setup -and change to the correct project if needed: - -`oc project reactivemanifesto-website` - -After which you can set up your docker: - -`docker login -u USERNAME -p $(oc whoami -t) https://registry.pro-us-east-1.openshift.com` - -Then push the local image: - -`docker push registry.pro-us-east-1.openshift.com/reactivemanifesto-website/reactivemanifesto-website:latest` - -### Openshift Setup - -In case it needs re-built, the YAML files are in the deploy folder: - -* reactivemanifesto-deployment.yaml -* reactivemanifesto-imagestream.yaml -* https-reactivemanifesto-route.yaml -* https-www-reactivemanifesto-route.yaml -* reactivemanifesto-website-service.yaml - -You can choose to run these scripts via your `oc` cli or simply upload them into the openshift UI under their respective headings. -Note: with oc you will need to first `oc login` - -ie. `oc apply -f deployment/reactivemanifesto-deployment.yaml` (repeat for each yaml) - -Secrets are managed through the openshift > secrets UI and are linked via the deployment.yaml +In case it needs re-built, the YAML files are in the deploy folder and the secrets in 1Password diff --git a/deploy/https-reactivemanifesto-route.yaml b/deploy/https-reactivemanifesto-route.yaml deleted file mode 100644 index a70bc37..0000000 --- a/deploy/https-reactivemanifesto-route.yaml +++ /dev/null @@ -1,23 +0,0 @@ -# This is OpenShift online specific yaml -apiVersion: route.openshift.io/v1 -kind: Route -metadata: - labels: - app: reactivemanifesto-website - name: reactivemanifesto.org - namespace: reactivemanifesto-website -spec: - host: reactivemanifesto.org - port: - targetPort: 9000-tcp - to: - kind: Service - name: reactivemanifesto-website-svc - weight: 100 - wildcardPolicy: None - tls: - insecureEdgeTerminationPolicy: Redirect - termination: edge - certificate: GET_FROM_COMODOSSL - key: BUILT_LOCALLY_AND_FED_TO_COMODOSSL - caCertificate: GET_FROM_COMODOSSL \ No newline at end of file diff --git a/deploy/https-www-reactivemanifesto-route.yaml b/deploy/https-www-reactivemanifesto-route.yaml deleted file mode 100644 index 7fcd151..0000000 --- a/deploy/https-www-reactivemanifesto-route.yaml +++ /dev/null @@ -1,23 +0,0 @@ -# This is OpenShift online specific yaml -apiVersion: route.openshift.io/v1 -kind: Route -metadata: - labels: - app: reactivemanifesto-website - name: https-www-reactivemanifesto-website - namespace: reactivemanifesto-website -spec: - host: www.reactivemanifesto.org - port: - targetPort: 9000-tcp - to: - kind: Service - name: reactivemanifesto-website-svc - weight: 100 - wildcardPolicy: None - tls: - insecureEdgeTerminationPolicy: Redirect - termination: edge - certificate: GET_FROM_COMODOSSL - key: BUILT_LOCALLY_AND_FED_TO_COMODOSSL - caCertificate: GET_FROM_COMODOSSL \ No newline at end of file diff --git a/deploy/reactivemanifesto-deployment.yaml b/deploy/reactivemanifesto-deployment.yaml index 43fc1cf..6078fee 100644 --- a/deploy/reactivemanifesto-deployment.yaml +++ b/deploy/reactivemanifesto-deployment.yaml @@ -1,36 +1,267 @@ -apiVersion: apps.openshift.io/v1 -kind: DeploymentConfig +apiVersion: apps/v1 +kind: Deployment metadata: - creationTimestamp: '2020-08-07T13:52:53Z' - generation: 3 + annotations: + autopilot.gke.io/resource-adjustment: '{"input":{"containers":[{"limits":{"memory":"1500Mi"},"name":"reactivemanifesto-website"}]},"output":{"containers":[{"limits":{"cpu":"250m","ephemeral-storage":"1Gi","memory":"1500Mi"},"requests":{"cpu":"250m","ephemeral-storage":"1Gi","memory":"1500Mi"},"name":"reactivemanifesto-website"}]},"modified":true}' + autopilot.gke.io/warden-version: 2.7.41 + deployment.kubernetes.io/revision: "26" + kubectl.kubernetes.io/last-applied-configuration: | + {"apiVersion":"apps/v1","kind":"Deployment","metadata":{"annotations":{},"generation":3,"labels":{"app":"reactivemanifesto-website"},"name":"reactivemanifesto-website","namespace":"reactivemanifesto-website"},"spec":{"replicas":1,"revisionHistoryLimit":10,"selector":{"matchLabels":{"app":"reactivemanifesto-website","deploymentconfig":"reactivemanifesto-website"}},"strategy":{"rollingUpdate":{"maxSurge":1,"maxUnavailable":1},"type":"RollingUpdate"},"template":{"metadata":{"annotations":null,"creationTimestamp":null,"labels":{"app":"reactivemanifesto-website","deploymentconfig":"reactivemanifesto-website"}},"spec":{"containers":[{"env":[{"name":"HTTP_BIND_ADDRESS","value":"0.0.0.0"},{"name":"JAVA_OPTS","value":"-Dpidfile.path=/dev/null -Dconfig.resource=application.conf -Xmx1g -Xms1g -Xss512k -Dfile.encoding=UTF-8"},{"name":"APPLICATION_SECRET","valueFrom":{"secretKeyRef":{"key":"APPLICATION_SECRET","name":"application-secret"}}},{"name":"GITHUB_CLIENT_ID","valueFrom":{"secretKeyRef":{"key":"GITHUB_CLIENT_ID","name":"github-client-id"}}},{"name":"GITHUB_CLIENT_SECRET","valueFrom":{"secretKeyRef":{"key":"GITHUB_CLIENT_SECRET","name":"github-client-secret"}}},{"name":"GOOGLE_API_KEY","valueFrom":{"secretKeyRef":{"key":"GOOGLE_API_KEY","name":"google-api-key"}}},{"name":"GOOGLE_CLIENT_ID","valueFrom":{"secretKeyRef":{"key":"GOOGLE_CLIENT_ID","name":"google-client-id"}}},{"name":"GOOGLE_CLIENT_SECRET","valueFrom":{"secretKeyRef":{"key":"GOOGLE_CLIENT_SECRET","name":"google-client-secret"}}},{"name":"LINKEDIN_CLIENT_ID","valueFrom":{"secretKeyRef":{"key":"LINKEDIN_CLIENT_ID","name":"linkedin-client-id"}}},{"name":"LINKEDIN_CLIENT_SECRET","valueFrom":{"secretKeyRef":{"key":"LINKEDIN_CLIENT_SECRET","name":"linkedin-client-secret"}}},{"name":"MONGODB_URI","valueFrom":{"secretKeyRef":{"key":"MONGODB_URI","name":"mongodb-uri"}}},{"name":"TWITTER_AUTH_KEY","valueFrom":{"secretKeyRef":{"key":"TWITTER_AUTH_KEY","name":"twitter-auth-key"}}},{"name":"TWITTER_AUTH_SECRET","valueFrom":{"secretKeyRef":{"key":"TWITTER_AUTH_SECRET","name":"twitter-auth-secret"}}},{"name":"TWITTER_BEARER_TOKEN","valueFrom":{"secretKeyRef":{"key":"TWITTER_BEARER_TOKEN","name":"twitter-bearer-token"}}}],"image":"docker.cloudsmith.io/generic/reactive:latest","imagePullPolicy":"Always","livenessProbe":{"failureThreshold":3,"httpGet":{"path":"/health","port":9000,"scheme":"HTTP"},"initialDelaySeconds":10,"periodSeconds":10,"successThreshold":1,"timeoutSeconds":5},"name":"reactivemanifesto-website","ports":[{"containerPort":9000,"protocol":"TCP"}],"readinessProbe":{"failureThreshold":3,"httpGet":{"path":"/health","port":9000,"scheme":"HTTP"},"initialDelaySeconds":10,"periodSeconds":10,"successThreshold":1,"timeoutSeconds":5},"resources":{"limits":{"memory":"1500Mi"}},"terminationMessagePath":"/dev/termination-log","terminationMessagePolicy":"File"}],"dnsPolicy":"ClusterFirst","restartPolicy":"Always","schedulerName":"default-scheduler","securityContext":{},"terminationGracePeriodSeconds":30}}},"status":{"availableReplicas":0,"conditions":[{"lastTransitionTime":"2020-08-07T13:52:53Z","lastUpdateTime":"2020-08-07T13:52:53Z","message":"Deployment config does not have minimum availability.","status":"False","type":"Available"},{"lastTransitionTime":"2020-08-07T15:21:03Z","lastUpdateTime":"2020-08-07T15:21:03Z","message":"replication controller \"reactivemanifesto-website-1\" is progressing","reason":"ReplicationControllerUpdated","status":"True","type":"Progressing"}],"observedGeneration":3,"replicas":2,"unavailableReplicas":2,"updatedReplicas":2}} + creationTimestamp: "2023-10-06T22:08:46Z" + generation: 27 labels: app: reactivemanifesto-website + managedFields: + - apiVersion: apps/v1 + fieldsType: FieldsV1 + fieldsV1: + f:metadata: + f:labels: + .: {} + f:app: {} + f:spec: + f:progressDeadlineSeconds: {} + f:replicas: {} + f:revisionHistoryLimit: {} + f:selector: {} + f:strategy: + f:rollingUpdate: {} + f:type: {} + f:template: + f:metadata: + f:labels: + .: {} + f:app: {} + f:deploymentconfig: {} + f:spec: + f:containers: + k:{"name":"reactivemanifesto-website"}: + .: {} + f:env: + .: {} + k:{"name":"APPLICATION_SECRET"}: + .: {} + f:name: {} + f:valueFrom: + .: {} + f:secretKeyRef: {} + k:{"name":"GITHUB_CLIENT_ID"}: + .: {} + f:name: {} + f:valueFrom: + .: {} + f:secretKeyRef: {} + k:{"name":"GITHUB_CLIENT_SECRET"}: + .: {} + f:name: {} + f:valueFrom: + .: {} + f:secretKeyRef: {} + k:{"name":"GOOGLE_API_KEY"}: + .: {} + f:name: {} + f:valueFrom: + .: {} + f:secretKeyRef: {} + k:{"name":"GOOGLE_CLIENT_ID"}: + .: {} + f:name: {} + f:valueFrom: + .: {} + f:secretKeyRef: {} + k:{"name":"GOOGLE_CLIENT_SECRET"}: + .: {} + f:name: {} + f:valueFrom: + .: {} + f:secretKeyRef: {} + k:{"name":"HTTP_BIND_ADDRESS"}: + .: {} + f:name: {} + f:value: {} + k:{"name":"JAVA_OPTS"}: + .: {} + f:name: {} + f:value: {} + k:{"name":"LINKEDIN_CLIENT_ID"}: + .: {} + f:name: {} + f:valueFrom: + .: {} + f:secretKeyRef: {} + k:{"name":"LINKEDIN_CLIENT_SECRET"}: + .: {} + f:name: {} + f:valueFrom: + .: {} + f:secretKeyRef: {} + k:{"name":"MONGODB_URI"}: + .: {} + f:name: {} + f:valueFrom: + .: {} + f:secretKeyRef: {} + k:{"name":"TWITTER_AUTH_KEY"}: + .: {} + f:name: {} + f:valueFrom: + .: {} + f:secretKeyRef: {} + k:{"name":"TWITTER_AUTH_SECRET"}: + .: {} + f:name: {} + f:valueFrom: + .: {} + f:secretKeyRef: {} + k:{"name":"TWITTER_BEARER_TOKEN"}: + .: {} + f:name: {} + f:valueFrom: + .: {} + f:secretKeyRef: {} + f:imagePullPolicy: {} + f:livenessProbe: + .: {} + f:failureThreshold: {} + f:httpGet: + .: {} + f:path: {} + f:port: {} + f:scheme: {} + f:initialDelaySeconds: {} + f:successThreshold: {} + f:name: {} + f:ports: + .: {} + k:{"containerPort":9000,"protocol":"TCP"}: + .: {} + f:containerPort: {} + f:protocol: {} + f:readinessProbe: + .: {} + f:failureThreshold: {} + f:httpGet: + .: {} + f:path: {} + f:port: {} + f:scheme: {} + f:initialDelaySeconds: {} + f:periodSeconds: {} + f:successThreshold: {} + f:timeoutSeconds: {} + f:resources: + .: {} + f:limits: + .: {} + f:memory: {} + f:terminationMessagePath: {} + f:terminationMessagePolicy: {} + f:dnsPolicy: {} + f:restartPolicy: {} + f:schedulerName: {} + f:securityContext: {} + f:terminationGracePeriodSeconds: {} + manager: kubectl-create + operation: Update + time: "2023-10-06T22:08:45Z" + - apiVersion: apps/v1 + fieldsType: FieldsV1 + fieldsV1: + f:metadata: + f:annotations: + f:kubectl.kubernetes.io/last-applied-configuration: {} + manager: kubectl-client-side-apply + operation: Update + time: "2023-10-06T22:31:39Z" + - apiVersion: apps/v1 + fieldsType: FieldsV1 + fieldsV1: + f:spec: + f:strategy: + f:rollingUpdate: + f:maxSurge: {} + f:maxUnavailable: {} + f:template: + f:spec: + f:containers: + k:{"name":"reactivemanifesto-website"}: + f:image: {} + f:livenessProbe: + f:periodSeconds: {} + f:timeoutSeconds: {} + f:imagePullSecrets: + .: {} + k:{"name":"cloudsmith-internal-registry"}: {} + manager: GoogleCloudConsole + operation: Update + time: "2023-10-25T03:45:23Z" + - apiVersion: apps/v1 + fieldsType: FieldsV1 + fieldsV1: + f:spec: + f:template: + f:metadata: + f:annotations: + .: {} + f:kubectl.kubernetes.io/restartedAt: {} + manager: kubectl-rollout + operation: Update + time: "2023-11-10T19:26:10Z" + - apiVersion: apps/v1 + fieldsType: FieldsV1 + fieldsV1: + f:metadata: + f:annotations: + f:deployment.kubernetes.io/revision: {} + f:status: + f:availableReplicas: {} + f:conditions: + .: {} + k:{"type":"Available"}: + .: {} + f:lastTransitionTime: {} + f:lastUpdateTime: {} + f:message: {} + f:reason: {} + f:status: {} + f:type: {} + k:{"type":"Progressing"}: + .: {} + f:lastTransitionTime: {} + f:lastUpdateTime: {} + f:message: {} + f:reason: {} + f:status: {} + f:type: {} + f:observedGeneration: {} + f:readyReplicas: {} + f:replicas: {} + f:updatedReplicas: {} + manager: kube-controller-manager + operation: Update + subresource: status + time: "2023-11-10T19:27:49Z" name: reactivemanifesto-website namespace: reactivemanifesto-website - resourceVersion: '1111306392' - selfLink: >- - /apis/apps.openshift.io/v1/namespaces/reactivemanifesto-website/deploymentconfigs/reactivemanifesto-website - uid: 4a06c80d-d8b5-11ea-9233-12b5519f9b58 + resourceVersion: "36814161" + uid: 25024f6f-8609-4b0e-a524-dbebbba35227 spec: + progressDeadlineSeconds: 600 replicas: 1 revisionHistoryLimit: 10 selector: - app: reactivemanifesto-website - deploymentconfig: reactivemanifesto-website + matchLabels: + app: reactivemanifesto-website + deploymentconfig: reactivemanifesto-website strategy: - activeDeadlineSeconds: 21600 - resources: {} - rollingParams: - intervalSeconds: 1 - maxSurge: 1 - maxUnavailable: 1 - timeoutSeconds: 600 - updatePeriodSeconds: 1 - type: Rolling + rollingUpdate: + maxSurge: 2 + maxUnavailable: 0 + type: RollingUpdate template: metadata: annotations: - openshift.io/generated-by: OpenShiftWebConsole + kubectl.kubernetes.io/restartedAt: "2023-11-10T19:26:10Z" creationTimestamp: null labels: app: reactivemanifesto-website @@ -41,7 +272,8 @@ spec: - name: HTTP_BIND_ADDRESS value: 0.0.0.0 - name: JAVA_OPTS - value: "-Dpidfile.path=/dev/null -Dconfig.resource=application.conf -Xmx1g -Xms1g -Xss512k -Dfile.encoding=UTF-8" + value: -Dpidfile.path=/dev/null -Dconfig.resource=application.conf -Xmx1g + -Xms1g -Xss512k -Dfile.encoding=UTF-8 - name: APPLICATION_SECRET valueFrom: secretKeyRef: @@ -102,8 +334,7 @@ spec: secretKeyRef: key: TWITTER_BEARER_TOKEN name: twitter-bearer-token - image: >- - docker-registry.default.svc:5000/reactivemanifesto-website/reactivemanifesto-website@sha256:8cb6ef7bd0b651ef21dffad8166228b9f00a584c5afe1182aef05d024254cef2 + image: docker.cloudsmith.io/lightbend/internal-registry/reactivemanifesto-website:latest imagePullPolicy: Always livenessProbe: failureThreshold: 3 @@ -112,9 +343,13 @@ spec: port: 9000 scheme: HTTP initialDelaySeconds: 10 - periodSeconds: 10 + periodSeconds: 30 successThreshold: 1 - timeoutSeconds: 5 + timeoutSeconds: 15 + name: reactivemanifesto-website + ports: + - containerPort: 9000 + protocol: TCP readinessProbe: failureThreshold: 3 httpGet: @@ -125,54 +360,51 @@ spec: periodSeconds: 10 successThreshold: 1 timeoutSeconds: 5 - name: reactivemanifesto-website resources: limits: + cpu: 250m + ephemeral-storage: 1Gi memory: 1500Mi - ports: - - containerPort: 9000 - protocol: TCP + requests: + cpu: 250m + ephemeral-storage: 1Gi + memory: 1500Mi + securityContext: + capabilities: + drop: + - NET_RAW terminationMessagePath: /dev/termination-log terminationMessagePolicy: File dnsPolicy: ClusterFirst + imagePullSecrets: + - name: cloudsmith-internal-registry restartPolicy: Always schedulerName: default-scheduler - securityContext: {} + securityContext: + seccompProfile: + type: RuntimeDefault terminationGracePeriodSeconds: 30 - test: false - triggers: - - imageChangeParams: - automatic: true - containerNames: - - reactivemanifesto-website - from: - kind: ImageStreamTag - name: 'reactivemanifesto-website:latest' - namespace: reactivemanifesto-website - lastTriggeredImage: >- - docker-registry.default.svc:5000/reactivemanifesto-website/reactivemanifesto-website@sha256:8cb6ef7bd0b651ef21dffad8166228b9f00a584c5afe1182aef05d024254cef2 - type: ImageChange - - type: ConfigChange + tolerations: + - effect: NoSchedule + key: kubernetes.io/arch + operator: Equal + value: amd64 status: - availableReplicas: 0 + availableReplicas: 1 conditions: - - lastTransitionTime: '2020-08-07T13:52:53Z' - lastUpdateTime: '2020-08-07T13:52:53Z' - message: Deployment config does not have minimum availability. - status: 'False' + - lastTransitionTime: "2023-11-10T02:31:04Z" + lastUpdateTime: "2023-11-10T02:31:04Z" + message: Deployment has minimum availability. + reason: MinimumReplicasAvailable + status: "True" type: Available - - lastTransitionTime: '2020-08-07T15:21:03Z' - lastUpdateTime: '2020-08-07T15:21:03Z' - message: replication controller "reactivemanifesto-website-1" is progressing - reason: ReplicationControllerUpdated - status: 'True' + - lastTransitionTime: "2023-10-07T15:35:50Z" + lastUpdateTime: "2023-11-10T19:27:49Z" + message: ReplicaSet "reactivemanifesto-website-7f557788f9" has successfully progressed. + reason: NewReplicaSetAvailable + status: "True" type: Progressing - details: - causes: - - type: ConfigChange - message: config change - latestVersion: 1 - observedGeneration: 3 - replicas: 2 - unavailableReplicas: 2 - updatedReplicas: 2 + observedGeneration: 27 + readyReplicas: 1 + replicas: 1 + updatedReplicas: 1 \ No newline at end of file diff --git a/deploy/reactivemanifesto-imagestream.yaml b/deploy/reactivemanifesto-imagestream.yaml deleted file mode 100644 index 770323e..0000000 --- a/deploy/reactivemanifesto-imagestream.yaml +++ /dev/null @@ -1,20 +0,0 @@ -# This is OpenShift online specific yaml -apiVersion: image.openshift.io/v1 -kind: ImageStream -metadata: - name: reactivemanifesto-website - namespace: reactivemanifesto-website -spec: - lookupPolicy: - local: false - tags: - - annotations: null - from: - kind: DockerImage - name: 'registry.pro-us-east-1.openshift.com/reactivemanifesto-website/reactivemanifesto-website:latest' - generation: 6 - importPolicy: - scheduled: true - name: latest - referencePolicy: - type: Source \ No newline at end of file diff --git a/deploy/reactivemanifesto-ingress.yaml b/deploy/reactivemanifesto-ingress.yaml new file mode 100644 index 0000000..29139be --- /dev/null +++ b/deploy/reactivemanifesto-ingress.yaml @@ -0,0 +1,88 @@ +apiVersion: networking.k8s.io/v1 +kind: Ingress +metadata: + annotations: + ingress.kubernetes.io/backends: '{"k8s1-42e4f580-kube-system-default-http-backend-80-348ae31c":"HEALTHY","k8s1-42e4f580-reactivemanifest-reactivemanifesto-we-90-f935911d":"HEALTHY"}' + ingress.kubernetes.io/forwarding-rule: k8s2-fr-dpdfc38p-reactivemanifesto--reactivemanifesto--zzbarglx + ingress.kubernetes.io/https-forwarding-rule: k8s2-fs-dpdfc38p-reactivemanifesto--reactivemanifesto--zzbarglx + ingress.kubernetes.io/https-target-proxy: k8s2-ts-dpdfc38p-reactivemanifesto--reactivemanifesto--zzbarglx + ingress.kubernetes.io/ssl-cert: k8s2-cr-dpdfc38p-wn61qmbplyjui2h0-a4b9eb63829768d0 + ingress.kubernetes.io/static-ip: k8s2-fr-dpdfc38p-reactivemanifesto--reactivemanifesto--zzbarglx + ingress.kubernetes.io/target-proxy: k8s2-tp-dpdfc38p-reactivemanifesto--reactivemanifesto--zzbarglx + ingress.kubernetes.io/url-map: k8s2-um-dpdfc38p-reactivemanifesto--reactivemanifesto--zzbarglx + kubernetes.io/ingress.allow-http: "true" + kubernetes.io/ingress.class: gce + creationTimestamp: "2023-10-09T00:33:20Z" + finalizers: + - networking.gke.io/ingress-finalizer-V2 + generation: 1 + managedFields: + - apiVersion: networking.k8s.io/v1 + fieldsType: FieldsV1 + fieldsV1: + f:metadata: + f:annotations: + f:kubernetes.io/ingress.allow-http: {} + f:kubernetes.io/ingress.class: {} + f:spec: + f:rules: {} + f:tls: {} + manager: GoogleCloudConsole + operation: Update + time: "2023-10-09T00:43:18Z" + - apiVersion: networking.k8s.io/v1 + fieldsType: FieldsV1 + fieldsV1: + f:metadata: + f:annotations: + .: {} + f:ingress.kubernetes.io/backends: {} + f:ingress.kubernetes.io/forwarding-rule: {} + f:ingress.kubernetes.io/https-forwarding-rule: {} + f:ingress.kubernetes.io/https-target-proxy: {} + f:ingress.kubernetes.io/ssl-cert: {} + f:ingress.kubernetes.io/static-ip: {} + f:ingress.kubernetes.io/target-proxy: {} + f:ingress.kubernetes.io/url-map: {} + f:finalizers: + .: {} + v:"networking.gke.io/ingress-finalizer-V2": {} + f:status: + f:loadBalancer: + f:ingress: {} + manager: glbc + operation: Update + subresource: status + time: "2023-11-09T18:43:26Z" + name: reactivemanifesto-ingress + namespace: reactivemanifesto-website + resourceVersion: "35776882" + uid: 2086dc78-067e-46fb-bc6d-9e59bc982fb2 +spec: + rules: + - host: reactivemanifesto.org + http: + paths: + - backend: + service: + name: reactivemanifesto-website-7n7gz + port: + number: 9000 + path: /* + pathType: ImplementationSpecific + - host: www.reactivemanifesto.org + http: + paths: + - backend: + service: + name: reactivemanifesto-website-7n7gz + port: + number: 9000 + path: /* + pathType: ImplementationSpecific + tls: + - secretName: reactive-manifesto-org-tls-2023-24 +status: + loadBalancer: + ingress: + - ip: 34.120.167.124 \ No newline at end of file diff --git a/deploy/reactivemanifesto-namespace.yaml b/deploy/reactivemanifesto-namespace.yaml new file mode 100644 index 0000000..a005358 --- /dev/null +++ b/deploy/reactivemanifesto-namespace.yaml @@ -0,0 +1,6 @@ +apiVersion: v1 +kind: Namespace +metadata: + name: reactivemanifesto-website + labels: + name: reactivemanifesto-website \ No newline at end of file diff --git a/deploy/reactivemanifesto-website-service.yaml b/deploy/reactivemanifesto-website-service.yaml index b31f1fb..c62d471 100644 --- a/deploy/reactivemanifesto-website-service.yaml +++ b/deploy/reactivemanifesto-website-service.yaml @@ -1,17 +1,69 @@ apiVersion: v1 kind: Service metadata: + annotations: + cloud.google.com/neg: '{"ingress":true}' + cloud.google.com/neg-status: '{"network_endpoint_groups":{"9000":"k8s1-42e4f580-reactivemanifest-reactivemanifesto-we-90-f935911d"},"zones":["us-east4-a","us-east4-b","us-east4-c"]}' + creationTimestamp: "2023-10-09T00:23:56Z" + generateName: reactivemanifesto-website- labels: app: reactivemanifesto-website - name: reactivemanifesto-website-svc + managedFields: + - apiVersion: v1 + fieldsType: FieldsV1 + fieldsV1: + f:metadata: + f:annotations: + f:cloud.google.com/neg: {} + f:generateName: {} + f:labels: + .: {} + f:app: {} + f:spec: + f:internalTrafficPolicy: {} + f:ports: + .: {} + k:{"port":9000,"protocol":"TCP"}: + .: {} + f:port: {} + f:protocol: {} + f:targetPort: {} + f:selector: {} + f:sessionAffinity: {} + f:type: {} + manager: GoogleCloudConsole + operation: Update + time: "2023-10-25T04:43:20Z" + - apiVersion: v1 + fieldsType: FieldsV1 + fieldsV1: + f:metadata: + f:annotations: + f:cloud.google.com/neg-status: {} + manager: glbc + operation: Update + subresource: status + time: "2023-11-10T15:33:14Z" + name: reactivemanifesto-website-7n7gz + namespace: reactivemanifesto-website + resourceVersion: "36649053" + uid: e35de7de-9415-4a6c-b3b3-c1d1837267c9 spec: - clusterIP: 172.30.132.34 + clusterIP: 34.118.227.133 + clusterIPs: + - 34.118.227.133 + internalTrafficPolicy: Cluster + ipFamilies: + - IPv4 + ipFamilyPolicy: SingleStack ports: - - name: 9000-tcp - port: 9000 + - port: 9000 protocol: TCP targetPort: 9000 selector: app: reactivemanifesto-website + deploymentconfig: reactivemanifesto-website sessionAffinity: None type: ClusterIP +status: + loadBalancer: {} \ No newline at end of file