setup/manifests/base/pod-broker/broker-statefulset.yaml (306 lines of code) (raw):
# Copyright 2019 Google LLC
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
name: pod-broker-gateway
spec:
selector:
# updated with patch to match target ingressgateway
istio: ingressgateway
servers:
- port:
number: 80
name: http
protocol: HTTP
# Hosts should be added using kustomize patch.
hosts:
- "*"
---
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: pod-broker
spec:
hosts:
- "*"
gateways:
- pod-broker-gateway
http:
- match:
- uri:
prefix: /broker/
rewrite:
uri: /
route:
- destination:
host: pod-broker
port:
number: 8080
# When using the istio sidecar, 503 UC errors are common due to per-app TCP connection timeout settings.
# https://karlstoney.com/2019/05/31/istio-503s-ucs-and-tcp-fun-times/
# https://github.com/istio/istio/issues/9113
#
retries:
attempts: 1
perTryTimeout: 2s
retryOn: gateway-error,connect-failure,refused-stream
- match:
- uri:
prefix: /reservation-broker/
rewrite:
uri: /
route:
- destination:
host: pod-broker
port:
number: 8082
retries:
attempts: 1
perTryTimeout: 2s
retryOn: gateway-error,connect-failure,refused-stream
- match:
- uri:
prefix: /publish/
rewrite:
uri: /
route:
- destination:
host: pod-broker
port:
number: 8081
- match:
- uri:
prefix: /
route:
- destination:
host: pod-broker
port:
number: 80
# When using the istio sidecar, 503 UC errors are common due to per-app TCP connection timeout settings.
# https://karlstoney.com/2019/05/31/istio-503s-ucs-and-tcp-fun-times/
# https://github.com/istio/istio/issues/9113
#
retries:
attempts: 1
perTryTimeout: 2s
retryOn: gateway-error,connect-failure,refused-stream
---
apiVersion: v1
kind: ConfigMap
metadata:
name: pod-broker-config
data:
POD_BROKER_PARAM_Theme: "dark"
POD_BROKER_PARAM_Title: "App Launcher"
POD_BROKER_PARAM_Domain: "broker.endpoints.my-project-id.cloud.goog"
POD_BROKER_PARAM_AuthHeader: "x-goog-authenticated-user-email"
POD_BROKER_PARAM_AuthonrizedUserRepoPattern: "gcr.io/.*"
---
apiVersion: v1
kind: ServiceAccount
metadata:
name: pod-broker
labels:
app: pod-broker
---
kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
name: pod-broker
labels:
app: pod-broker
subjects:
- kind: ServiceAccount
name: pod-broker
namespace: pod-broker-system
roleRef:
kind: ClusterRole
name: pod-broker
apiGroup: rbac.authorization.k8s.io
---
kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
name: pod-broker
namespace: pod-broker-system
labels:
app: pod-broker
rules:
- apiGroups:
- "*"
resources:
- "*"
verbs:
- "*"
- nonResourceURLs:
- "*"
verbs:
- "*"
---
apiVersion: v1
kind: Service
metadata:
name: pod-broker
spec:
selector:
app: pod-broker
ports:
- port: 8080
name: http-broker
targetPort: 8080
- port: 8081
name: http-publish
targetPort: 8081
- port: 8082
name: http-rbroker
targetPort: 8082
- port: 80
name: http-web
targetPort: 80
sessionAffinity: ClientIP
sessionAffinityConfig:
clientIP:
timeoutSeconds: 10
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: pod-broker
spec:
selector:
matchLabels:
app: pod-broker
serviceName: pod-broker
replicas: 1
volumeClaimTemplates: []
template:
metadata:
labels:
app: pod-broker
spec:
serviceAccountName: pod-broker
terminationGracePeriodSeconds: 5
volumes:
###
# temp volume for building statefulset manifests
###
- name: build-statefulsets
emptyDir: {}
###
# temp volume for building deployment type manifests
###
- name: build-deployments
emptyDir: {}
###
# temp volume for building deployment type user manifests
###
- name: build-deployments-user
emptyDir: {}
###
# temp volume for building user namespace manifests
###
- name: buildns
emptyDir: {}
###
# temp volume for storing app configs and manifest bundles.
###
- name: buildsrc
emptyDir: {}
###
# temp volume for storing cached user configs
###
- name: userconfig
emptyDir: {}
###
# App publishing job template
###
- name: app-publish-job-template
configMap:
name: app-publish-job-template
containers:
###
# pod-broker
###
- name: pod-broker
image: gcr.io/cloud-solutions-images/kube-pod-broker-controller:latest
command: ["/usr/local/bin/pod-broker"]
workingDir: "/var/run/build"
# Pull default pod broker config from ConfigMap
# Contains keys in the form of POD_BROKER_PARAM_ValueName=Value
envFrom:
- configMapRef:
name: pod-broker-config
optional: false
env:
- name: COOKIE_SECRET
valueFrom:
secretKeyRef:
name: pod-broker
key: COOKIE_SECRET
- name: OAUTH_CLIENT_ID
valueFrom:
secretKeyRef:
name: oauth-client-id
key: CLIENT_ID
volumeMounts:
- name: build-statefulsets
mountPath: /var/run/build
- name: buildns
mountPath: /var/run/buildns
- name: buildsrc
mountPath: /var/run/buildsrc
- name: userconfig
mountPath: /var/run/userconfig
readinessProbe:
tcpSocket:
port: 8080
###
# reservation-broker
###
- name: reservation-broker
image: gcr.io/cloud-solutions-images/kube-pod-broker-controller:latest
command: ["/usr/local/bin/reservation-broker"]
workingDir: "/var/run/build"
# Pull default pod broker config from ConfigMap
# Contains keys in the form of POD_BROKER_PARAM_ValueName=Value
envFrom:
- configMapRef:
name: pod-broker-config
optional: false
env:
- name: COOKIE_SECRET
valueFrom:
secretKeyRef:
name: pod-broker
key: COOKIE_SECRET
- name: OAUTH_CLIENT_ID
valueFrom:
secretKeyRef:
name: oauth-client-id
key: CLIENT_ID
volumeMounts:
- name: build-deployments
mountPath: /var/run/build
- name: build-deployments-user
mountPath: /var/run/buildusr
- name: buildsrc
mountPath: /var/run/buildsrc
readinessProbe:
tcpSocket:
port: 8082
###
# App config finder sidecar
###
- name: app-finder
image: gcr.io/cloud-solutions-images/kube-pod-broker-controller:latest
command: ["/usr/local/bin/app-finder"]
workingDir: "/var/run/buildsrc"
env:
- name: NAMESPACE
valueFrom:
fieldRef:
fieldPath: metadata.namespace
volumeMounts:
- name: build-statefulsets
mountPath: /var/run/build
- name: buildsrc
mountPath: /var/run/buildsrc
- name: userconfig
mountPath: /var/run/userconfig
###
# Image finding sidecar
###
- name: image-list
image: gcr.io/cloud-solutions-images/kube-pod-broker-controller:latest
workingDir: /var/run/build
command: ["/usr/local/bin/image-finder"]
env:
- name: NAMESPACE
valueFrom:
fieldRef:
fieldPath: metadata.namespace
volumeMounts:
- name: build-statefulsets
mountPath: /var/run/build
- name: userconfig
mountPath: /var/run/userconfig
###
# App publisher sidecar
###
- name: app-publisher
image: gcr.io/cloud-solutions-images/kube-pod-broker-controller:latest
workingDir: /run/app-publisher
command: ["/usr/local/bin/app-publisher"]
# Pull default pod broker config from ConfigMap
# Contains keys in the form of POD_BROKER_PARAM_ValueName=Value
envFrom:
- configMapRef:
name: pod-broker-config
optional: false
env:
- name: NAMESPACE
valueFrom:
fieldRef:
fieldPath: metadata.namespace
volumeMounts:
- name: buildsrc
mountPath: /run/buildsrc
- name: app-publish-job-template
mountPath: /run/app-publisher/template
readinessProbe:
tcpSocket:
port: 8080
###
# pod-broker web
###
- name: web
image: gcr.io/cloud-solutions-images/kube-pod-broker-web:latest
command: ["nginx", "-g", "daemon off;"]
workingDir: "/usr/share/nginx/html"
readinessProbe:
httpGet:
port: 80