--- apiVersion: v1 kind: Namespace metadata: labels: appmesh.k8s.aws/sidecarInjectorWebhook: enabled name: ${APP_NAMESPACE} --- apiVersion: appmesh.k8s.aws/v1beta1 kind: Mesh metadata: name: ${MESH_NAME} --- apiVersion: appmesh.k8s.aws/v1beta1 kind: VirtualNode metadata: name: front namespace: ${APP_NAMESPACE} spec: meshName: ${MESH_NAME} listeners: - portMapping: port: 8080 protocol: http serviceDiscovery: cloudMap: namespaceName: ${CLOUDMAP_NAMESPACE} serviceName: front backends: - virtualService: virtualServiceName: colorapp.${CLOUDMAP_NAMESPACE} --- apiVersion: appmesh.k8s.aws/v1beta1 kind: VirtualNode metadata: name: colorapp-blue namespace: ${APP_NAMESPACE} spec: meshName: ${MESH_NAME} listeners: - portMapping: port: 8080 protocol: http serviceDiscovery: cloudMap: namespaceName: ${CLOUDMAP_NAMESPACE} serviceName: colorapp --- apiVersion: appmesh.k8s.aws/v1beta1 kind: VirtualNode metadata: name: colorapp-red namespace: ${APP_NAMESPACE} spec: meshName: ${MESH_NAME} listeners: - portMapping: port: 8080 protocol: http serviceDiscovery: cloudMap: namespaceName: ${CLOUDMAP_NAMESPACE} serviceName: colorapp --- apiVersion: appmesh.k8s.aws/v1beta1 kind: VirtualService metadata: name: colorapp.${CLOUDMAP_NAMESPACE} namespace: ${APP_NAMESPACE} spec: meshName: ${MESH_NAME} virtualRouter: name: colorapp-router listeners: - portMapping: port: 8080 protocol: http routes: - name: color-route http: match: prefix: / action: weightedTargets: - virtualNodeName: colorapp-red weight: 1 - virtualNodeName: colorapp-blue weight: 1 --- apiVersion: appmesh.k8s.aws/v1beta1 kind: VirtualService metadata: name: front.${CLOUDMAP_NAMESPACE} namespace: ${APP_NAMESPACE} spec: meshName: ${MESH_NAME} virtualRouter: name: front-router listeners: - portMapping: port: 8080 protocol: http routes: - name: color-route http: match: prefix: /color action: weightedTargets: - virtualNodeName: front weight: 1 --- apiVersion: apps/v1 kind: Deployment metadata: name: front namespace: ${APP_NAMESPACE} spec: replicas: 1 selector: matchLabels: app: front version: v1 template: metadata: annotations: appmesh.k8s.aws/mesh: ${MESH_NAME} labels: app: front version: v1 spec: containers: - name: front image: ${FRONT_APP_IMAGE} ports: - containerPort: 8080 env: - name: "PORT" value: "8080" - name: "COLOR_HOST" value: "colorapp.${CLOUDMAP_NAMESPACE}:8080" --- apiVersion: apps/v1 kind: Deployment metadata: name: colorapp-blue namespace: ${APP_NAMESPACE} spec: replicas: 1 selector: matchLabels: app: colorapp version: blue template: metadata: annotations: appmesh.k8s.aws/mesh: ${MESH_NAME} labels: app: colorapp version: blue spec: containers: - name: colorapp image: ${COLOR_APP_IMAGE} ports: - containerPort: 8080 env: - name: "SERVER_PORT" value: "8080" - name: "COLOR" value: "blue" --- apiVersion: apps/v1 kind: Deployment metadata: name: colorapp-red namespace: ${APP_NAMESPACE} spec: replicas: 1 selector: matchLabels: app: colorapp version: red template: metadata: annotations: appmesh.k8s.aws/mesh: ${MESH_NAME} labels: app: colorapp version: red spec: containers: - name: colorapp image: ${COLOR_APP_IMAGE} ports: - containerPort: 8080 env: - name: "SERVER_PORT" value: "8080" - name: "COLOR" value: "red"