├── samples └── istio │ ├── kiali.png │ ├── kiali2.png │ ├── fault-injection.yaml │ ├── gateway.yaml │ ├── deployment-template.yaml │ ├── services.yaml │ ├── make-deployments │ ├── make-deployment.awk │ └── README.md ├── .gitignore ├── spec ├── NOTICE ├── src │ └── main │ │ ├── resources │ │ └── META-INF │ │ │ ├── NOTICE │ │ │ └── LICENSE │ │ └── asciidoc │ │ ├── microprofile-service-mesh-spec.asciidoc │ │ ├── license-alv2.asciidoc │ │ ├── terms.asciidoc │ │ └── ecosystem.asciidoc └── pom.xml ├── README.adoc ├── LICENSE └── pom.xml /samples/istio/kiali.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microprofile/microprofile-service-mesh/HEAD/samples/istio/kiali.png -------------------------------------------------------------------------------- /samples/istio/kiali2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microprofile/microprofile-service-mesh/HEAD/samples/istio/kiali2.png -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | *.class 2 | .settings/ 3 | .checkstyle 4 | target/ 5 | tck/bin/ 6 | .project 7 | build/ 8 | .classpath 9 | .factorypath 10 | test-output 11 | /*.log 12 | .idea 13 | *.iml 14 | *.iwl 15 | *.ipr 16 | .DS_STORE 17 | # Ignore a release.conf for perform_release/* script usage 18 | release.conf 19 | -------------------------------------------------------------------------------- /samples/istio/fault-injection.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: networking.istio.io/v1alpha3 2 | kind: VirtualService 3 | metadata: 4 | name: serviceb 5 | spec: 6 | hosts: 7 | - serviceb-service 8 | http: 9 | - fault: 10 | abort: 11 | percent: 25 12 | httpStatus: 400 13 | route: 14 | - destination: 15 | host: serviceb-service 16 | -------------------------------------------------------------------------------- /spec/NOTICE: -------------------------------------------------------------------------------- 1 | ========================================================================= 2 | == NOTICE file corresponding to section 4(d) of the Apache License, == 3 | == Version 2.0, in this case for Microprofile Service Mesh == 4 | ========================================================================= 5 | 6 | SPDXVersion: SPDX-2.1 7 | PackageName: Eclipse Microprofile 8 | PackageHomePage: http://www.eclipse.org/microprofile 9 | PackageLicenseDeclared: Apache-2.0 10 | 11 | PackageCopyrightText: 12 | Emily Jiang emijiang@uk.ibm.com 13 | -------------------------------------------------------------------------------- /spec/src/main/resources/META-INF/NOTICE: -------------------------------------------------------------------------------- 1 | ========================================================================= 2 | == NOTICE file corresponding to section 4(d) of the Apache License, == 3 | == Version 2.0, in this case for Microprofile Service Mesh == 4 | ========================================================================= 5 | 6 | SPDXVersion: SPDX-2.1 7 | PackageName: Eclipse Microprofile 8 | PackageHomePage: http://www.eclipse.org/microprofile 9 | PackageLicenseDeclared: Apache-2.0 10 | 11 | PackageCopyrightText: 12 | Emily Jiang emijiang@uk.ibm.com 13 | -------------------------------------------------------------------------------- /samples/istio/gateway.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: networking.istio.io/v1alpha3 2 | kind: Gateway 3 | metadata: 4 | name: mp-servicemesh-sample-gateway 5 | spec: 6 | selector: 7 | istio: ingressgateway # use Istio default gateway implementation 8 | servers: 9 | - port: 10 | number: 80 11 | name: http 12 | protocol: HTTP 13 | hosts: 14 | - "*" 15 | --- 16 | apiVersion: networking.istio.io/v1alpha3 17 | kind: VirtualService 18 | metadata: 19 | name: mp-servicemesh-sample 20 | spec: 21 | hosts: 22 | - "*" 23 | gateways: 24 | - mp-servicemesh-sample-gateway 25 | http: 26 | - match: 27 | - uri: 28 | prefix: /mp-servicemesh-sample 29 | route: 30 | - destination: 31 | port: 32 | number: 8080 33 | host: servicea-service 34 | -------------------------------------------------------------------------------- /samples/istio/deployment-template.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: extensions/v1beta1 2 | kind: Deployment 3 | metadata: 4 | name: #DEPLOYMENT-deployment 5 | spec: 6 | replicas: 1 7 | template: 8 | metadata: 9 | labels: 10 | app: #SERVICE 11 | version: #VERSION 12 | runtime: #RUNTIME 13 | mp-version: #MPVERSION 14 | spec: 15 | containers: 16 | - name: #SERVICE-#RUNTIME 17 | image: #PREFIX/#DEPLOYMENT:#MPVERSION 18 | imagePullPolicy: Always 19 | ports: 20 | - containerPort: 8080 21 | envFrom: 22 | - configMapRef: 23 | name: #SERVICE-config 24 | livenessProbe: 25 | exec: 26 | command: 27 | - curl 28 | - -f 29 | - http://localhost:8080/health/live 30 | initialDelaySeconds: 120 31 | periodSeconds: 10 32 | -------------------------------------------------------------------------------- /samples/istio/services.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Service 3 | metadata: 4 | name: servicea-service 5 | labels: 6 | app: servicea 7 | spec: 8 | ports: 9 | - port: 8080 10 | name: http 11 | selector: 12 | app: servicea 13 | --- 14 | apiVersion: v1 15 | kind: Service 16 | metadata: 17 | name: serviceb-service 18 | labels: 19 | app: serviceb 20 | spec: 21 | ports: 22 | - port: 8080 23 | name: http 24 | selector: 25 | app: serviceb 26 | --- 27 | apiVersion: v1 28 | kind: ConfigMap 29 | metadata: 30 | name: servicea-config 31 | data: 32 | serviceB_host: serviceb-service 33 | serviceB_http_port: "8080" 34 | lifetime: "0" 35 | failFrequency: "0" 36 | MP_Fault_Tolerance_NonFallback_Enabled: "true" 37 | --- 38 | apiVersion: v1 39 | kind: ConfigMap 40 | metadata: 41 | name: serviceb-config 42 | data: 43 | lifetime: "120" 44 | failFrequency: "10" 45 | -------------------------------------------------------------------------------- /samples/istio/make-deployments: -------------------------------------------------------------------------------- 1 | #!/usr/bin/bash 2 | 3 | template=deployment-template.yaml 4 | regex="(.+)/(.*)(service)([ab])([^ ]*) (.*)" 5 | 6 | docker images | while read -r line 7 | do 8 | if [[ $line =~ $regex ]] 9 | then 10 | dockerid=${BASH_REMATCH[1]} 11 | service=${BASH_REMATCH[3]}${BASH_REMATCH[4]} 12 | deployment=${BASH_REMATCH[2]}${BASH_REMATCH[3]}${BASH_REMATCH[4]}${BASH_REMATCH[5]} 13 | 14 | while IFS='' read -r line || [[ -n "$line" ]]; do 15 | if [[ "$line" =~ (.*)SERVICE(.*) ]] 16 | then 17 | echo "${BASH_REMATCH[1]}${service}${BASH_REMATCH[2]}" 18 | elif [[ "$line" =~ (.*)DEPLOYMENT(.*) ]] 19 | then 20 | echo "${BASH_REMATCH[1]}${deployment}${BASH_REMATCH[2]}" 21 | elif [[ "$line" =~ (.*)IMAGE(.*) ]] 22 | then 23 | echo "${BASH_REMATCH[1]}${dockerid}/${deployment}${BASH_REMATCH[2]}" 24 | else 25 | echo "$line" 26 | fi 27 | done < $template 28 | echo "---" 29 | fi 30 | done 31 | -------------------------------------------------------------------------------- /spec/src/main/asciidoc/microprofile-service-mesh-spec.asciidoc: -------------------------------------------------------------------------------- 1 | // 2 | // Copyright (c) 2018 Eclipse Microprofile Contributors: 3 | // Licensed under the Apache License, Version 2.0 (the "License"); 4 | // you may not use this file except in compliance with the License. 5 | // You may obtain a copy of the License at 6 | // 7 | // http://www.apache.org/licenses/LICENSE-2.0 8 | // 9 | // Unless required by applicable law or agreed to in writing, software 10 | // distributed under the License is distributed on an "AS IS" BASIS, 11 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 | // See the License for the specific language governing permissions and 13 | // limitations under the License. 14 | // 15 | 16 | = Microprofile Service Mesh 17 | :authors: Emily Jiang, Scott Stark 18 | :email: emijiang@uk.ibm.com 19 | :version-label!: 20 | :sectanchors: 21 | :doctype: book 22 | :license: Apache License v2.0 23 | :source-highlighter: coderay 24 | :toc: left 25 | :toclevels: 4 26 | :sectnumlevels: 4 27 | ifdef::backend-pdf[] 28 | :pagenums: 29 | endif::[] 30 | 31 | 32 | include::license-alv2.asciidoc[] 33 | 34 | include::terms.asciidoc[] 35 | include::ecosystem.asciidoc[] 36 | 37 | -------------------------------------------------------------------------------- /spec/src/main/asciidoc/license-alv2.asciidoc: -------------------------------------------------------------------------------- 1 | // 2 | // Copyright (c) 2018 Eclipse Microprofile Contributors: 3 | // 4 | // 5 | // Licensed under the Apache License, Version 2.0 (the "License"); 6 | // you may not use this file except in compliance with the License. 7 | // You may obtain a copy of the License at 8 | // 9 | // http://www.apache.org/licenses/LICENSE-2.0 10 | // 11 | // Unless required by applicable law or agreed to in writing, software 12 | // distributed under the License is distributed on an "AS IS" BASIS, 13 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | // See the License for the specific language governing permissions and 15 | // limitations under the License. 16 | // 17 | 18 | [subs="normal"] 19 | .... 20 | 21 | Specification: {doctitle} 22 | 23 | Version: {revnumber} 24 | 25 | Status: {revremark} 26 | 27 | Release: {revdate} 28 | 29 | Copyright (c) 2018 Contributors to the Eclipse Foundation 30 | 31 | Licensed under the Apache License, Version 2.0 (the "License"); 32 | you may not use this file except in compliance with the License. 33 | You may obtain a copy of the License at 34 | 35 | http://www.apache.org/licenses/LICENSE-2.0 36 | 37 | Unless required by applicable law or agreed to in writing, software 38 | distributed under the License is distributed on an "AS IS" BASIS, 39 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 40 | See the License for the specific language governing permissions and 41 | limitations under the License. 42 | 43 | .... 44 | -------------------------------------------------------------------------------- /samples/istio/make-deployment.awk: -------------------------------------------------------------------------------- 1 | #! /usr/bin/awk 2 | # 3 | # SPDX-License-Identifier: Apache-2.0 4 | # 5 | # Image format: 6 | # /service?-: 7 | # E.g.: 8 | # $ docker images 9 | # REPOSITORY TAG IMAGE ID CREATED SIZE 10 | # pilhuhn/serviceb-liberty mp-1.3 0c0a0e090d19 26 minutes ago 566MB 11 | # pilhuhn/serviceb-thorntail mp-1.3 6c57fa7fcbd8 About an hour ago 521MB 12 | 13 | # Usage: awk -f make-deployment.awk [prefix=] 14 | # if is passed, only images that have this prefix will be considered. 15 | # e.g. with the above prefix=pilhuhn would include the two listed images 16 | # while prefix=foo would not include them. 17 | # if no prefix is given, all images are considered 18 | 19 | 20 | BEGIN { 21 | 22 | if (ARGC == 2) { 23 | split(ARGV[1],tmp,"="); 24 | PREF=tmp[2]; 25 | } 26 | 27 | 28 | # read template 29 | while(getline < "deployment-template.yaml" > 0) 30 | template[++tlines] = $0; 31 | 32 | # read list of images 33 | while("docker images" | getline > 0 ) { 34 | 35 | if ($0 ~ /service.-/) { 36 | if (index($0,PREF) != 1) { 37 | continue; 38 | } 39 | # Format is either pilhuhn/servicea-thorntail mp1.3 40 | # or docker.io/pilhuhn/servicea-thorntail mp-1.3 41 | # $0 is the entire line and $1..n are the columns 42 | # $1 = REPOSITORY column 43 | # $2 = TAG column 44 | MPVERSION=$2; 45 | n = split($1, tmp, "/"); 46 | if (n == 2) { 47 | PREFIX=tmp[1]; 48 | SVC= tmp[2]; 49 | } else { 50 | PREFIX=tmp["1"] "/" tmp[2]; 51 | SVC= tmp[3]; 52 | } 53 | n = split(SVC, tmp, "-"); 54 | RUNTIME = tmp[2]; 55 | SERVICE = tmp[1]; 56 | VERSION = RUNTIME "-" MPVERSION; 57 | 58 | # print PREFIX, ">", SERVICE, ">", RUNTIME, ">", MPVERSION, ">", VERSION; 59 | 60 | for (i = 1 ; i <= tlines; i++) { 61 | temp = template[i]; 62 | gsub("#RUNTIME", RUNTIME, temp); 63 | gsub("#MPVERSION", MPVERSION, temp); 64 | gsub("#SERVICE", SERVICE, temp); 65 | gsub("#VERSION", VERSION, temp); 66 | gsub("#PREFIX", PREFIX, temp); 67 | gsub("#DEPLOYMENT", SERVICE"-"RUNTIME, temp); 68 | print temp; 69 | 70 | } 71 | print "---"; 72 | } 73 | } 74 | } 75 | -------------------------------------------------------------------------------- /README.adoc: -------------------------------------------------------------------------------- 1 | // 2 | // Copyright (c) 2018 Contributors to the Eclipse Foundation 3 | // 4 | // See the NOTICE file(s) distributed with this work for additional 5 | // information regarding copyright ownership. 6 | // 7 | // Licensed under the Apache License, Version 2.0 (the "License"); 8 | // you may not use this file except in compliance with the License. 9 | // You may obtain a copy of the License at 10 | // 11 | // http://www.apache.org/licenses/LICENSE-2.0 12 | // 13 | // Unless required by applicable law or agreed to in writing, software 14 | // distributed under the License is distributed on an "AS IS" BASIS, 15 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 16 | // See the License for the specific language governing permissions and 17 | // limitations under the License. 18 | 19 | 20 | == MicroProfile Service Mesh 21 | 22 | image:https://badges.gitter.im/eclipse/microprofile-service-mesh.svg[link="https://gitter.im/eclipse/microprofile-service-mesh"] 23 | 24 | === Rationale 25 | 26 | Based on some https://groups.google.com/forum/#!searchin/microprofile/istio%7Csort:date/microprofile/7obnAXjt3QA/k4htskrcBwAJ[discussion], we need to investigate the relationship between MicroProfile and Service Mesh. 27 | 28 | === Why? 29 | 30 | MicroProfile defines programming model for developing cloud-native microservices. Cloud Native microservices developed with MicroProfile can take advantage of a Service Mesh by extracting many concerns away from the development of the microservice itself. It is important for MicroProfile to understand the capabilities of service mesh, so that MicroProfile can offer complimentary features for the infrastructure and avoid the conflicts. Let's find out what they can offer first. 31 | 32 | === What is a service mesh? 33 | A service mesh is a dedicated infrastructure layer for making service-to-service communication safe, fast and reliable. Cloud-native microservices needs a service mesh infrastructure to provide service to service communication QoS. In practice, the service mesh add some lightweigh proxies without microservices needing to be aware. By default, proxies handle only intra-service mesh cluster from source to destination. 34 | 35 | The service mesh is a networking model, sitting at layer of transport e.g. TCP/IP. It handles service to service communications. Service mesh manages the communication in the language-agnostic way. 36 | 37 | === Service Mesh Implementations 38 | There are two popular service mesh as follows: 39 | 40 | * https://istio.io/[Istio] 41 | * https://linkerd.io/[Linkerd] 42 | 43 | The above two implementations are both open-source projects and designed for cloud-natvie microservices. Istio uses Lyfts' Envoy as a sidecar proxy while Linkerd is built on top of Netty and Finagle. 44 | Istio offers more functionalities than Linkerd, such as enforcing access control and usage policies across the service mesh. Refer to this link:https://abhishek-tiwari.com/a-sidecar-for-your-service-mesh/[page] for more comparison 45 | 46 | This specification looks at the service mesh in general with more focus on Istio. 47 | 48 | === What is MicroProfile? 49 | MicroProfile defines a programming model for developing cloud-native microservices. It offers the following capabilities, such as config, Fault Tolerance, Metrics, Health, JWT, Open API, Open Tracing etc. As we progress, more and more specification might be defined in MicroProfile. 50 | 51 | === The Ecosystem 52 | This specification will look at each individual MicroProfile specification and define the best practices on how best to be used in the microservices to be running a service mesh architecture. 53 | 54 | -------------------------------------------------------------------------------- /spec/pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 16 | 17 | 4.0.0 18 | 19 | 20 | 21 | org.eclipse.microprofile.service.mesh 22 | microprofile-service-mesh-parent 23 | 1.0-SNAPSHOT 24 | 25 | 26 | org.eclipse.microprofile.service.mesh 27 | microprofile-service-mesh-spec 28 | pom 29 | MicroProfile Service Mesh Specification 30 | MicroProfile Service Mesh Specification :: Specification 31 | 32 | 33 | 1.5.6 34 | 1.5.0-alpha.15 35 | Apache License v 2.0 36 | MMMM dd, yyyy 37 | ${maven.build.timestamp} 38 | Draft 39 | 40 | 41 | 42 | clean package 43 | 44 | 45 | org.asciidoctor 46 | asciidoctor-maven-plugin 47 | ${asciidoctor-maven.version} 48 | 49 | 50 | org.asciidoctor 51 | asciidoctorj-pdf 52 | ${asciidoctorj-pdf.version} 53 | 54 | 55 | 56 | 57 | generate-pdf-doc 58 | generate-resources 59 | 60 | process-asciidoc 61 | 62 | 63 | pdf 64 | 65 | ${project.version} 66 | ${revremark} 67 | ${revisiondate} 68 | 69 | 70 | 71 | 72 | output-html 73 | generate-resources 74 | 75 | process-asciidoc 76 | 77 | 78 | html5 79 | 80 | ${project.version} 81 | ${revremark} 82 | ${revisiondate} 83 | 84 | 85 | 86 | 87 | 88 | microprofile-service-mesh-spec.asciidoc 89 | coderay 90 | 91 | Apache License v2.0 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | -------------------------------------------------------------------------------- /spec/src/main/asciidoc/terms.asciidoc: -------------------------------------------------------------------------------- 1 | // 2 | // Copyright (c) 2018 Contributors to the Eclipse Foundation 3 | // 4 | // See the NOTICE file(s) distributed with this work for additional 5 | // information regarding copyright ownership. 6 | // 7 | // Licensed under the Apache License, Version 2.0 (the "License"); 8 | // you may not use this file except in compliance with the License. 9 | // You may obtain a copy of the License at 10 | // 11 | // http://www.apache.org/licenses/LICENSE-2.0 12 | // 13 | // Unless required by applicable law or agreed to in writing, software 14 | // distributed under the License is distributed on an "AS IS" BASIS, 15 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 16 | // See the License for the specific language governing permissions and 17 | // limitations under the License. 18 | // 19 | = Service Mesh Terms and Impacts 20 | 21 | Here we are looking to define a common 22 | 23 | Container Image: layered lightweight  Docker-formatted container images. An image is a binary that includes all of the requirements for running a single container, as well as metadata describing its needs and capabilities. 24 | [NOTE] 25 | Affects: None 26 | 27 | ConfigMap: can be used to store fine-grained information like individual properties or coarse-grained information like entire config files or JSON blobs. 28 | [NOTE] 29 | Affects: config api 30 | 31 | Secret: an object that contains a small amount of sensitive data such as a password, a token, or a key. Such information might otherwise be put in a Pod specification or in an image; putting it in a Secret object allows for more control over how it is used, and reduces the risk of accidental exposure. 32 | [NOTE] 33 | Affects: config api 34 | 35 | Node: A node provides the runtime environments for containers. Each node in a Kubernetes cluster has the required services to be managed by the master. Nodes also have the required services to run pods, including the Docker service, a kubelet, and a service proxy. 36 | 37 | Pod:  group of one or more containers (such as Docker containers), with shared storage/network, and a specification for how to run the containers. A pod’s contents are always co-located and co-scheduled, and run in a shared context. A pod models an application-specific “logical host” - it contains one or more application containers which are relatively tightly coupled — in a pre-container world, they would have executed on the same physical or virtual machine. 38 | Affects: possibly opentracing, 39 | 40 | Deployment: describe the desired state of a particular component of an application as a pod template. Kubernetes deployments create replica sets (an iteration of replication controllers), which orchestrate pod lifecycles. 41 | Affects: Metrics, opentracing, 42 | 43 | ReplicaSet: ensures that a specified number of pod replicas are running at any given time 44 | 45 | Controller: a control loop that watches the shared state of the cluster through the apiserver and makes changes attempting to move the current state towards the desired state. 46 | 47 | DNS: Domain name service that supports registration of service IP, port to A and SRV records. 48 | 49 | EndpointService: A REST endpoint running in a MicroProfile container providing one or more endpoints providing business logic. This is what the MicroProfile most directly deals with. 50 | 51 | ServiceAccount: Service accounts provide a flexible way to control API access without sharing a regular user’s credentials. 52 | 53 | MeshService, (k8s service): allows developers to abstract away the functionality of a set of Pods, and expose it to other developers through a well-defined API. It allows adding a name to this level of abstraction and perform rudimentary L4 load balancing. But it doesn’t help with higher-level problems, such as L7 metrics, traffic splitting, rate limiting, circuit breaking, etc. 54 | 55 | ServiceProxy: An Istio like proxy layer that supports the L7 behaviors like metrics, traffic splitting, rate limiting, circuit breaking, etc. 56 | [NOTE] 57 | Affects: Metrics, Fault tolerance, opentracing, 58 | 59 | ServiceBroker: An implementation of the Open Service Broker API that provides a listing of ManagedServices available for provisioning and binding. 60 | [NOTE] 61 | Is the ServiceBroker, ServiceCatalog, ServiceClass, ManagedService a microprofile-service-mesh abstraction we want to define? A prototype of these abstractions that deploys to OpenShift can be found here: https://github.com/starksm64/wildfly-swarm-service-broker[wildfly-swarm-service-broker] 62 | 63 | ManagedService: An external service provisioned and bound by a ServiceBroker. 64 | 65 | ServiceCatalog: A collection of ManagedService information from a ServiceBroker. 66 | 67 | ServiceClass: A type of ManagedService with information about the service along with plans that vary the service deployment 68 | 69 | ServiceInstance: an instance of a ManagedService provisioned by a client. 70 | 71 | ServiceBinding: a binding of a ServiceInstance to a Secret 72 | 73 | -------------------------------------------------------------------------------- /spec/src/main/asciidoc/ecosystem.asciidoc: -------------------------------------------------------------------------------- 1 | // Copyright (c) 2018 Contributors to the Eclipse Foundation 2 | // 3 | // See the NOTICE file(s) distributed with this work for additional 4 | // information regarding copyright ownership. 5 | // 6 | // Licensed under the Apache License, Version 2.0 (the "License"); 7 | // you may not use this file except in compliance with the License. 8 | // You may obtain a copy of the License at 9 | // 10 | // http://www.apache.org/licenses/LICENSE-2.0 11 | // 12 | // Unless required by applicable law or agreed to in writing, software 13 | // distributed under the License is distributed on an "AS IS" BASIS, 14 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15 | // See the License for the specific language governing permissions and 16 | // limitations under the License. 17 | // Contributors: 18 | // Emily Jiang 19 | // 20 | 21 | = MicroProfile Config and Service Mesh 22 | 23 | MicroProfile Config (https://github.com/eclipse/microprofile-config) provides a solution to externalise the configuration. The default config sources includes environment variables, system properties and microprofile-config.properties on the classpath. 24 | 25 | The properties defined in Kubernetes config map can be transformed to environment variables via envFrom. After a cloud-native microservice is deployed, if an extra config source is needed, this file can be mounted to configmap, which then use envFrom facility to expose the properties to the microservie. 26 | 27 | [source, text] 28 | ---- 29 | kind: ConfigMap 30 | apiVersion: v1 31 | metadata: 32 | name: example-config 33 | namespace: default 34 | data: 35 | example.property.1: hello 36 | example.property.2: world 37 | 38 | 39 | ---- 40 | ---- 41 | # Use envFrom to load ConfigMaps into environment variables 42 | 43 | apiVersion: apps/v1beta2 44 | kind: Deployment 45 | metadata: 46 | name: mans-not-hot 47 | labels: 48 | app: mans-not-hot 49 | spec: 50 | replicas: 1 51 | selector: 52 | matchLabels: 53 | app: mans-not-hot 54 | template: 55 | metadata: 56 | labels: 57 | app: mans-not-hot 58 | spec: 59 | containers: 60 | - name: app 61 | image: gcr.io/mans-not-hot/app:bed1f9d4 62 | imagePullPolicy: Always 63 | ports: 64 | - containerPort: 80 65 | envFrom: 66 | - configMapRef: 67 | name: example-config 68 | ---- 69 | 70 | Therefore, config properties specified in the config map are automatically injectable to the microservices via MicroProfile Config APIs. 71 | 72 | = MicroProfile Health Check and Service Mesh 73 | In Service Mesh architecture, each pod has a lifecycle. Service Mesh needs to know when to kill a pod and when to route requests to a pod. Therefore, it needs to know each pod's health status. A pod's health status is measured using Liveness and Readiness. 74 | 75 | == Liveness 76 | Many microservices run for long periods of time and they eventually might transition to broken states, and cannot recover except being restarted. This is called liveness lifecycle. 77 | 78 | == Readiness 79 | 80 | Sometimes, microservices are temporarily unable to serve traffic. For example, an application might need to load large data or configuration files during startup. 81 | 82 | == MicroProfile Health Check 83 | 84 | MicroProfile Health Check (https://github.com/eclipse/microprofile-health/) denotes whether the microservice is live or ready. It exposes an endpoint `/health`. Invoking the endpoint returns either UP (healthy) or DOWN (unhealthy). 85 | 86 | 87 | == Service Mesh usage of Liveness and Readiness 88 | 89 | Service Mesh e.g. Istio can utilise the readiness and liveness status from the underline component such as Kubernetes. 90 | Kubernetes provides liveness probes or readiness probes to detect and remedy such situations. Kubernetes can check the pods frequently. 91 | If the pod is not live, it will destroy the pod and start a new one. If the application is not ready, Kubernetes doesn’t want to kill the application, but not to send it requests either. 92 | 93 | 94 | == The ecosystem 95 | The health check of services in the mesh can be achieved via Kubernetes liveness and readiness probe, where MicroProfile health attributes via the exposed health check endpoints with some meaningful response. The response of the liveness probe determines whether to recycle the corresponding pod, while the readiness response determines whether requests can be routed. 96 | 97 | [source, text] 98 | 99 | ---- 100 | livenessProbe: 101 | exec: 102 | command: 103 | - curl 104 | - -f 105 | - http://localhost:8080/health 106 | initialDelaySeconds: 10 107 | periodSeconds: 10 108 | 109 | ---- 110 | The above example demonstrates that MicroProfile Health Check complements to service mesh via Kubernetes. 111 | 112 | 113 | -------------------------------------------------------------------------------- /samples/istio/README.md: -------------------------------------------------------------------------------- 1 | ## MicroProfile Istio Sample 2 | This sample is intended to show the interaction between Istio and the various MicroProfile specifications. 3 | 4 | ### Requirements 5 | * [Git](https://git-scm.com/) 6 | * [Docker](https://www.docker.com/) 7 | * [Maven](https://maven.apache.org/install.html) 8 | * [Java 8]: Any compliant JDK should work. 9 | * [kubectl](https://kubernetes.io/docs/tasks/tools/install-kubectl/) 10 | * If your cluster is [minikube](https://kubernetes.io/docs/getting-started-guides/minikube/), you will already have this 11 | * [Istio](https://istio.io) 12 | * The sample is currently based on the preliminary release of Istio 1.0. 13 | 14 | ### Contents 15 | Various configuration files to deploy the service mesh sample services to Istio on Kubernetes. 16 | 17 | serviceA is currently the entry point for the sample. Once deployed, the sample can be accessed at: 18 | ``` 19 | http:///mp-servicemesh-sample/serviceA 20 | ``` 21 | ### Deployment Process 22 | 23 | The steps involved in building the project are: 24 | 1. [Build the services](#build) 25 | 2. [Push the images to a repository](#push) 26 | 3. [Deploy the sample to your cluster](#deploy) 27 | 28 | ### Build 29 | 30 | Each service resides in its own repository. Follow the instructions in the READMEs there to build the sample services and package them as docker images. 31 | * [serviceA](https://github.com/eclipse/microprofile-service-mesh-service-a) 32 | * [serviceB](https://github.com/eclipse/microprofile-service-mesh-service-b) 33 | 34 | ### Push 35 | 36 | If you followed the image naming suggestion from the individual service READMEs, you will have at least 2 images to 37 | push named something like <docker id>/servicea-<profile>: and <docker id>/serviceb-<profile>:. 38 | Assuming you're going to use docker hub as your repository, login there and push your images. 39 | 40 | ### Deploy 41 | 42 | You need to create deployment yaml for each service image you built, preprocess 43 | it using istioctl and then apply the resulting yaml with kubectl. 44 | If you followed the suggested naming convention for your service images, you can use the supplied script. 45 | Make sure you can access you cluster with kubectl and that Istio is installed. Use the following command to deploy your images: 46 | ``` 47 | awk -f make-deployment.awk | istioctl kube-inject -f - | kubectl apply -f - 48 | ``` 49 | If you have named your images in some other way, create deployment yaml for each of your images using the supplied deployment-template.yaml as a guide. Then apply your resulting yaml as follows: 50 | ``` 51 | istioctl kube-inject -f | kubectl apply -f - 52 | ``` 53 | Finally, deploy the remaining yaml with the following commands: 54 | ``` 55 | kubectl apply -f services.yaml 56 | istioctl create -f gateway.yaml 57 | ``` 58 | 59 | ### Run the Sample 60 | 61 | You now have the sample installed in your cluster. The entrypoint for the sample is: 62 | ``` 63 | http:///mp-servicemesh-sample/serviceA 64 | ``` 65 | 66 | Or by using the Istio-Ingressgateway (exposed by an OpenShift route): 67 | 68 | ``` 69 | http://istio-ingressgateway-istio-system.172.31.7.9.nip.io/mp-servicemesh-sample/serviceA 70 | ``` 71 | 72 | 73 | The result should look something like: 74 | ``` 75 | {"time":1532422406926,"source":"org.eclipse.microprofile.servicemesh.servicea.ServiceA$Proxy$_$$_WeldSubclass@9acb4f34","message":"Hello from serviceA","data":{"time":1532422406926,"message":"Hello from serviceB (org.eclipse.microprofile.servicemesh.serviceb.ServiceBEndpoint$Proxy$_$$_WeldSubclass@6d4029a5) at Tue Jul 24 08:53:26 UTC 2018 on serviceb-deployment-5d999b479b-t27g4 (ServiceB call count: 4, failFrequency: 10)","callCount":0,"tries":0,"fallback":false},"callCount":4,"tries":1,"fallback":false} 76 | ``` 77 | or 78 | ``` 79 | {"time":1532423342925,"source":"org.eclipse.microprofile.servicemesh.servicea.ServiceA$Proxy$_$$_WeldSubclass@58b97ce0","message":"ServiceA fallback. ServiceB could not be reached at: http://serviceb-zervice:8080/mp-servicemesh-sample","callCount":0,"tries":3,"fallback":true} 80 | ``` 81 | This shows that serviceA is working and has tried to communicate with serviceB. 82 | Sometimes this falls back depending on the current code in serviceB and whether Istio traffic management has already been applied. 83 | 84 | ![Mesh view with 2 implementations of ServiceB](kiali.png) 85 | 86 | 87 | ### Inject Faults to Provoke Fault Tolerance Behavior 88 | 89 | ServiceB can be configured to succeed only every nth time it's called - where n is the failFrequency property in the serviceB configmap. 90 | 91 | Delays and faults can be injected into the service calls to test the fault tolerant behavior of the application. 92 | A sample Istio virtual service configuration file is provided which will cause 25% of calls to serviceB to fail. 93 | The sample virtual service can be installed with this command 94 | 95 | kubectl create -f fault-injection.yaml 96 | 97 | and deleted with: 98 | 99 | kubectl delete -f fault-injection.yaml 100 | 101 | You can experiment with the percentage to provoke different fault tolerance behavior. For example, a percentage of 100 will cause the fallback method of serviceA to be invoked every time and the result will always be similar to: 102 | ``` 103 | {"time":1532423342925,"source":"org.eclipse.microprofile.servicemesh.servicea.ServiceA$Proxy$_$$_WeldSubclass@58b97ce0","message":"ServiceA fallback. ServiceB could not be reached at: http://serviceb-zervice:8080/mp-servicemesh-sample","callCount":0,"tries":3,"fallback":true} 104 | ``` 105 | The percentage can be modified by editing fault-injection.yaml and re-running the kubectl command above to update the virtual service. 106 | 107 | ![Mesh view with fault injection towards ServiceB](kiali2.png) 108 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Apache License 2 | Version 2.0, January 2004 3 | http://www.apache.org/licenses/ 4 | 5 | TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 6 | 7 | 1. Definitions. 8 | 9 | "License" shall mean the terms and conditions for use, reproduction, 10 | and distribution as defined by Sections 1 through 9 of this document. 11 | 12 | "Licensor" shall mean the copyright owner or entity authorized by 13 | the copyright owner that is granting the License. 14 | 15 | "Legal Entity" shall mean the union of the acting entity and all 16 | other entities that control, are controlled by, or are under common 17 | control with that entity. For the purposes of this definition, 18 | "control" means (i) the power, direct or indirect, to cause the 19 | direction or management of such entity, whether by contract or 20 | otherwise, or (ii) ownership of fifty percent (50%) or more of the 21 | outstanding shares, or (iii) beneficial ownership of such entity. 22 | 23 | "You" (or "Your") shall mean an individual or Legal Entity 24 | exercising permissions granted by this License. 25 | 26 | "Source" form shall mean the preferred form for making modifications, 27 | including but not limited to software source code, documentation 28 | source, and configuration files. 29 | 30 | "Object" form shall mean any form resulting from mechanical 31 | transformation or translation of a Source form, including but 32 | not limited to compiled object code, generated documentation, 33 | and conversions to other media types. 34 | 35 | "Work" shall mean the work of authorship, whether in Source or 36 | Object form, made available under the License, as indicated by a 37 | copyright notice that is included in or attached to the work 38 | (an example is provided in the Appendix below). 39 | 40 | "Derivative Works" shall mean any work, whether in Source or Object 41 | form, that is based on (or derived from) the Work and for which the 42 | editorial revisions, annotations, elaborations, or other modifications 43 | represent, as a whole, an original work of authorship. For the purposes 44 | of this License, Derivative Works shall not include works that remain 45 | separable from, or merely link (or bind by name) to the interfaces of, 46 | the Work and Derivative Works thereof. 47 | 48 | "Contribution" shall mean any work of authorship, including 49 | the original version of the Work and any modifications or additions 50 | to that Work or Derivative Works thereof, that is intentionally 51 | submitted to Licensor for inclusion in the Work by the copyright owner 52 | or by an individual or Legal Entity authorized to submit on behalf of 53 | the copyright owner. For the purposes of this definition, "submitted" 54 | means any form of electronic, verbal, or written communication sent 55 | to the Licensor or its representatives, including but not limited to 56 | communication on electronic mailing lists, source code control systems, 57 | and issue tracking systems that are managed by, or on behalf of, the 58 | Licensor for the purpose of discussing and improving the Work, but 59 | excluding communication that is conspicuously marked or otherwise 60 | designated in writing by the copyright owner as "Not a Contribution." 61 | 62 | "Contributor" shall mean Licensor and any individual or Legal Entity 63 | on behalf of whom a Contribution has been received by Licensor and 64 | subsequently incorporated within the Work. 65 | 66 | 2. Grant of Copyright License. Subject to the terms and conditions of 67 | this License, each Contributor hereby grants to You a perpetual, 68 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 69 | copyright license to reproduce, prepare Derivative Works of, 70 | publicly display, publicly perform, sublicense, and distribute the 71 | Work and such Derivative Works in Source or Object form. 72 | 73 | 3. Grant of Patent License. Subject to the terms and conditions of 74 | this License, each Contributor hereby grants to You a perpetual, 75 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 76 | (except as stated in this section) patent license to make, have made, 77 | use, offer to sell, sell, import, and otherwise transfer the Work, 78 | where such license applies only to those patent claims licensable 79 | by such Contributor that are necessarily infringed by their 80 | Contribution(s) alone or by combination of their Contribution(s) 81 | with the Work to which such Contribution(s) was submitted. If You 82 | institute patent litigation against any entity (including a 83 | cross-claim or counterclaim in a lawsuit) alleging that the Work 84 | or a Contribution incorporated within the Work constitutes direct 85 | or contributory patent infringement, then any patent licenses 86 | granted to You under this License for that Work shall terminate 87 | as of the date such litigation is filed. 88 | 89 | 4. Redistribution. You may reproduce and distribute copies of the 90 | Work or Derivative Works thereof in any medium, with or without 91 | modifications, and in Source or Object form, provided that You 92 | meet the following conditions: 93 | 94 | (a) You must give any other recipients of the Work or 95 | Derivative Works a copy of this License; and 96 | 97 | (b) You must cause any modified files to carry prominent notices 98 | stating that You changed the files; and 99 | 100 | (c) You must retain, in the Source form of any Derivative Works 101 | that You distribute, all copyright, patent, trademark, and 102 | attribution notices from the Source form of the Work, 103 | excluding those notices that do not pertain to any part of 104 | the Derivative Works; and 105 | 106 | (d) If the Work includes a "NOTICE" text file as part of its 107 | distribution, then any Derivative Works that You distribute must 108 | include a readable copy of the attribution notices contained 109 | within such NOTICE file, excluding those notices that do not 110 | pertain to any part of the Derivative Works, in at least one 111 | of the following places: within a NOTICE text file distributed 112 | as part of the Derivative Works; within the Source form or 113 | documentation, if provided along with the Derivative Works; or, 114 | within a display generated by the Derivative Works, if and 115 | wherever such third-party notices normally appear. The contents 116 | of the NOTICE file are for informational purposes only and 117 | do not modify the License. You may add Your own attribution 118 | notices within Derivative Works that You distribute, alongside 119 | or as an addendum to the NOTICE text from the Work, provided 120 | that such additional attribution notices cannot be construed 121 | as modifying the License. 122 | 123 | You may add Your own copyright statement to Your modifications and 124 | may provide additional or different license terms and conditions 125 | for use, reproduction, or distribution of Your modifications, or 126 | for any such Derivative Works as a whole, provided Your use, 127 | reproduction, and distribution of the Work otherwise complies with 128 | the conditions stated in this License. 129 | 130 | 5. Submission of Contributions. Unless You explicitly state otherwise, 131 | any Contribution intentionally submitted for inclusion in the Work 132 | by You to the Licensor shall be under the terms and conditions of 133 | this License, without any additional terms or conditions. 134 | Notwithstanding the above, nothing herein shall supersede or modify 135 | the terms of any separate license agreement you may have executed 136 | with Licensor regarding such Contributions. 137 | 138 | 6. Trademarks. This License does not grant permission to use the trade 139 | names, trademarks, service marks, or product names of the Licensor, 140 | except as required for reasonable and customary use in describing the 141 | origin of the Work and reproducing the content of the NOTICE file. 142 | 143 | 7. Disclaimer of Warranty. Unless required by applicable law or 144 | agreed to in writing, Licensor provides the Work (and each 145 | Contributor provides its Contributions) on an "AS IS" BASIS, 146 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or 147 | implied, including, without limitation, any warranties or conditions 148 | of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A 149 | PARTICULAR PURPOSE. You are solely responsible for determining the 150 | appropriateness of using or redistributing the Work and assume any 151 | risks associated with Your exercise of permissions under this License. 152 | 153 | 8. Limitation of Liability. In no event and under no legal theory, 154 | whether in tort (including negligence), contract, or otherwise, 155 | unless required by applicable law (such as deliberate and grossly 156 | negligent acts) or agreed to in writing, shall any Contributor be 157 | liable to You for damages, including any direct, indirect, special, 158 | incidental, or consequential damages of any character arising as a 159 | result of this License or out of the use or inability to use the 160 | Work (including but not limited to damages for loss of goodwill, 161 | work stoppage, computer failure or malfunction, or any and all 162 | other commercial damages or losses), even if such Contributor 163 | has been advised of the possibility of such damages. 164 | 165 | 9. Accepting Warranty or Additional Liability. While redistributing 166 | the Work or Derivative Works thereof, You may choose to offer, 167 | and charge a fee for, acceptance of support, warranty, indemnity, 168 | or other liability obligations and/or rights consistent with this 169 | License. However, in accepting such obligations, You may act only 170 | on Your own behalf and on Your sole responsibility, not on behalf 171 | of any other Contributor, and only if You agree to indemnify, 172 | defend, and hold each Contributor harmless for any liability 173 | incurred by, or claims asserted against, such Contributor by reason 174 | of your accepting any such warranty or additional liability. 175 | 176 | END OF TERMS AND CONDITIONS 177 | 178 | APPENDIX: How to apply the Apache License to your work. 179 | 180 | To apply the Apache License to your work, attach the following 181 | boilerplate notice, with the fields enclosed by brackets "[]" 182 | replaced with your own identifying information. (Don't include 183 | the brackets!) The text should be enclosed in the appropriate 184 | comment syntax for the file format. We also recommend that a 185 | file or class name and description of purpose be included on the 186 | same "printed page" as the copyright notice for easier 187 | identification within third-party archives. 188 | 189 | Copyright [yyyy] [name of copyright owner] 190 | 191 | Licensed under the Apache License, Version 2.0 (the "License"); 192 | you may not use this file except in compliance with the License. 193 | You may obtain a copy of the License at 194 | 195 | http://www.apache.org/licenses/LICENSE-2.0 196 | 197 | Unless required by applicable law or agreed to in writing, software 198 | distributed under the License is distributed on an "AS IS" BASIS, 199 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 200 | See the License for the specific language governing permissions and 201 | limitations under the License. 202 | -------------------------------------------------------------------------------- /spec/src/main/resources/META-INF/LICENSE: -------------------------------------------------------------------------------- 1 | Apache License 2 | Version 2.0, January 2004 3 | http://www.apache.org/licenses/ 4 | 5 | TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 6 | 7 | 1. Definitions. 8 | 9 | "License" shall mean the terms and conditions for use, reproduction, 10 | and distribution as defined by Sections 1 through 9 of this document. 11 | 12 | "Licensor" shall mean the copyright owner or entity authorized by 13 | the copyright owner that is granting the License. 14 | 15 | "Legal Entity" shall mean the union of the acting entity and all 16 | other entities that control, are controlled by, or are under common 17 | control with that entity. For the purposes of this definition, 18 | "control" means (i) the power, direct or indirect, to cause the 19 | direction or management of such entity, whether by contract or 20 | otherwise, or (ii) ownership of fifty percent (50%) or more of the 21 | outstanding shares, or (iii) beneficial ownership of such entity. 22 | 23 | "You" (or "Your") shall mean an individual or Legal Entity 24 | exercising permissions granted by this License. 25 | 26 | "Source" form shall mean the preferred form for making modifications, 27 | including but not limited to software source code, documentation 28 | source, and configuration files. 29 | 30 | "Object" form shall mean any form resulting from mechanical 31 | transformation or translation of a Source form, including but 32 | not limited to compiled object code, generated documentation, 33 | and conversions to other media types. 34 | 35 | "Work" shall mean the work of authorship, whether in Source or 36 | Object form, made available under the License, as indicated by a 37 | copyright notice that is included in or attached to the work 38 | (an example is provided in the Appendix below). 39 | 40 | "Derivative Works" shall mean any work, whether in Source or Object 41 | form, that is based on (or derived from) the Work and for which the 42 | editorial revisions, annotations, elaborations, or other modifications 43 | represent, as a whole, an original work of authorship. For the purposes 44 | of this License, Derivative Works shall not include works that remain 45 | separable from, or merely link (or bind by name) to the interfaces of, 46 | the Work and Derivative Works thereof. 47 | 48 | "Contribution" shall mean any work of authorship, including 49 | the original version of the Work and any modifications or additions 50 | to that Work or Derivative Works thereof, that is intentionally 51 | submitted to Licensor for inclusion in the Work by the copyright owner 52 | or by an individual or Legal Entity authorized to submit on behalf of 53 | the copyright owner. For the purposes of this definition, "submitted" 54 | means any form of electronic, verbal, or written communication sent 55 | to the Licensor or its representatives, including but not limited to 56 | communication on electronic mailing lists, source code control systems, 57 | and issue tracking systems that are managed by, or on behalf of, the 58 | Licensor for the purpose of discussing and improving the Work, but 59 | excluding communication that is conspicuously marked or otherwise 60 | designated in writing by the copyright owner as "Not a Contribution." 61 | 62 | "Contributor" shall mean Licensor and any individual or Legal Entity 63 | on behalf of whom a Contribution has been received by Licensor and 64 | subsequently incorporated within the Work. 65 | 66 | 2. Grant of Copyright License. Subject to the terms and conditions of 67 | this License, each Contributor hereby grants to You a perpetual, 68 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 69 | copyright license to reproduce, prepare Derivative Works of, 70 | publicly display, publicly perform, sublicense, and distribute the 71 | Work and such Derivative Works in Source or Object form. 72 | 73 | 3. Grant of Patent License. Subject to the terms and conditions of 74 | this License, each Contributor hereby grants to You a perpetual, 75 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 76 | (except as stated in this section) patent license to make, have made, 77 | use, offer to sell, sell, import, and otherwise transfer the Work, 78 | where such license applies only to those patent claims licensable 79 | by such Contributor that are necessarily infringed by their 80 | Contribution(s) alone or by combination of their Contribution(s) 81 | with the Work to which such Contribution(s) was submitted. If You 82 | institute patent litigation against any entity (including a 83 | cross-claim or counterclaim in a lawsuit) alleging that the Work 84 | or a Contribution incorporated within the Work constitutes direct 85 | or contributory patent infringement, then any patent licenses 86 | granted to You under this License for that Work shall terminate 87 | as of the date such litigation is filed. 88 | 89 | 4. Redistribution. You may reproduce and distribute copies of the 90 | Work or Derivative Works thereof in any medium, with or without 91 | modifications, and in Source or Object form, provided that You 92 | meet the following conditions: 93 | 94 | (a) You must give any other recipients of the Work or 95 | Derivative Works a copy of this License; and 96 | 97 | (b) You must cause any modified files to carry prominent notices 98 | stating that You changed the files; and 99 | 100 | (c) You must retain, in the Source form of any Derivative Works 101 | that You distribute, all copyright, patent, trademark, and 102 | attribution notices from the Source form of the Work, 103 | excluding those notices that do not pertain to any part of 104 | the Derivative Works; and 105 | 106 | (d) If the Work includes a "NOTICE" text file as part of its 107 | distribution, then any Derivative Works that You distribute must 108 | include a readable copy of the attribution notices contained 109 | within such NOTICE file, excluding those notices that do not 110 | pertain to any part of the Derivative Works, in at least one 111 | of the following places: within a NOTICE text file distributed 112 | as part of the Derivative Works; within the Source form or 113 | documentation, if provided along with the Derivative Works; or, 114 | within a display generated by the Derivative Works, if and 115 | wherever such third-party notices normally appear. The contents 116 | of the NOTICE file are for informational purposes only and 117 | do not modify the License. You may add Your own attribution 118 | notices within Derivative Works that You distribute, alongside 119 | or as an addendum to the NOTICE text from the Work, provided 120 | that such additional attribution notices cannot be construed 121 | as modifying the License. 122 | 123 | You may add Your own copyright statement to Your modifications and 124 | may provide additional or different license terms and conditions 125 | for use, reproduction, or distribution of Your modifications, or 126 | for any such Derivative Works as a whole, provided Your use, 127 | reproduction, and distribution of the Work otherwise complies with 128 | the conditions stated in this License. 129 | 130 | 5. Submission of Contributions. Unless You explicitly state otherwise, 131 | any Contribution intentionally submitted for inclusion in the Work 132 | by You to the Licensor shall be under the terms and conditions of 133 | this License, without any additional terms or conditions. 134 | Notwithstanding the above, nothing herein shall supersede or modify 135 | the terms of any separate license agreement you may have executed 136 | with Licensor regarding such Contributions. 137 | 138 | 6. Trademarks. This License does not grant permission to use the trade 139 | names, trademarks, service marks, or product names of the Licensor, 140 | except as required for reasonable and customary use in describing the 141 | origin of the Work and reproducing the content of the NOTICE file. 142 | 143 | 7. Disclaimer of Warranty. Unless required by applicable law or 144 | agreed to in writing, Licensor provides the Work (and each 145 | Contributor provides its Contributions) on an "AS IS" BASIS, 146 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or 147 | implied, including, without limitation, any warranties or conditions 148 | of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A 149 | PARTICULAR PURPOSE. You are solely responsible for determining the 150 | appropriateness of using or redistributing the Work and assume any 151 | risks associated with Your exercise of permissions under this License. 152 | 153 | 8. Limitation of Liability. In no event and under no legal theory, 154 | whether in tort (including negligence), contract, or otherwise, 155 | unless required by applicable law (such as deliberate and grossly 156 | negligent acts) or agreed to in writing, shall any Contributor be 157 | liable to You for damages, including any direct, indirect, special, 158 | incidental, or consequential damages of any character arising as a 159 | result of this License or out of the use or inability to use the 160 | Work (including but not limited to damages for loss of goodwill, 161 | work stoppage, computer failure or malfunction, or any and all 162 | other commercial damages or losses), even if such Contributor 163 | has been advised of the possibility of such damages. 164 | 165 | 9. Accepting Warranty or Additional Liability. While redistributing 166 | the Work or Derivative Works thereof, You may choose to offer, 167 | and charge a fee for, acceptance of support, warranty, indemnity, 168 | or other liability obligations and/or rights consistent with this 169 | License. However, in accepting such obligations, You may act only 170 | on Your own behalf and on Your sole responsibility, not on behalf 171 | of any other Contributor, and only if You agree to indemnify, 172 | defend, and hold each Contributor harmless for any liability 173 | incurred by, or claims asserted against, such Contributor by reason 174 | of your accepting any such warranty or additional liability. 175 | 176 | END OF TERMS AND CONDITIONS 177 | 178 | APPENDIX: How to apply the Apache License to your work. 179 | 180 | To apply the Apache License to your work, attach the following 181 | boilerplate notice, with the fields enclosed by brackets "{}" 182 | replaced with your own identifying information. (Don't include 183 | the brackets!) The text should be enclosed in the appropriate 184 | comment syntax for the file format. We also recommend that a 185 | file or class name and description of purpose be included on the 186 | same "printed page" as the copyright notice for easier 187 | identification within third-party archives. 188 | 189 | Copyright {yyyy} {name of copyright owner} 190 | 191 | Licensed under the Apache License, Version 2.0 (the "License"); 192 | you may not use this file except in compliance with the License. 193 | You may obtain a copy of the License at 194 | 195 | http://www.apache.org/licenses/LICENSE-2.0 196 | 197 | Unless required by applicable law or agreed to in writing, software 198 | distributed under the License is distributed on an "AS IS" BASIS, 199 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 200 | See the License for the specific language governing permissions and 201 | limitations under the License. 202 | -------------------------------------------------------------------------------- /pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 16 | 17 | 4.0.0 18 | 19 | org.eclipse.microprofile.service.mesh 20 | microprofile-service-mesh-parent 21 | 1.0-SNAPSHOT 22 | pom 23 | MicroProfile Service Mesh 24 | Eclipse MicroProfile Service Mesh Feature :: Parent POM 25 | http://microprofile.io 26 | 27 | 28 | UTF-8 29 | 1.8 30 | 1.8 31 | 32 | https://osgi.org/javadoc/r6/annotation/ 33 | 34 | 2.17 35 | ^_?[a-z][a-zA-Z0-9]*$ 36 | 37 | 38 | 39 | 40 | Apache License, Version 2.0 41 | https://www.apache.org/licenses/LICENSE-2.0.txt 42 | repo 43 | A business-friendly OSS license 44 | 45 | 46 | 47 | 48 | Eclipse Foundation 49 | http://www.eclipse.org/ 50 | 51 | 52 | 53 | GitHub 54 | https://github.com/eclipse/microprofile-service-mesh/issues 55 | 56 | 57 | 58 | 59 | Emily Jiang 60 | https://github.com/Emily-Jiang 61 | IBM 62 | https://www.ibm.com 63 | 64 | 65 | 66 | 67 | 68 | scm:git:https://github.com/eclipse/microprofile-service-mesh.git 69 | scm:git:git@github.com:eclipse/microprofile-service-mesh.git 70 | https://github.com/eclipse/microprofile-service-mesh 71 | HEAD 72 | 73 | 74 | 75 | 76 | ossrh 77 | Sonatype OSSRH - Release Staging Area 78 | https://oss.sonatype.org/service/local/staging/deploy/maven2/ 79 | 80 | 81 | ossrh 82 | Sonatype OSSRH Snapshots 83 | https://oss.sonatype.org/content/repositories/snapshots/ 84 | true 85 | 86 | 87 | 88 | 89 | 90 | spec 91 | 92 | 93 | 94 | 95 | 96 | javax.enterprise 97 | cdi-api 98 | 1.2 99 | 100 | 101 | org.jboss.arquillian 102 | arquillian-bom 103 | 1.1.13.Final 104 | import 105 | pom 106 | 107 | 108 | 109 | 110 | 111 | 112 | repo.eclipse.org 113 | Project Repository - Releases 114 | https://repo.eclipse.org/content/groups/cbi/ 115 | 116 | 117 | microprofile.repo.eclipse.org 118 | Microprofile Project Repository - Releases 119 | https://repo.eclipse.org/content/groups/microprofile/ 120 | 121 | 122 | 123 | 124 | 125 | 126 | 127 | org.apache.maven.plugins 128 | maven-release-plugin 129 | 2.5.3 130 | 131 | true 132 | false 133 | true 134 | ${arguments} -Prelease -Drevremark=${revremark} 135 | 136 | 137 | 138 | org.eclipse.cbi.maven.plugins 139 | eclipse-jarsigner-plugin 140 | 1.1.4 141 | 142 | 143 | org.apache.maven.plugins 144 | maven-checkstyle-plugin 145 | ${checkstyle.version} 146 | 147 | 148 | org.apache.maven.plugins 149 | maven-jar-plugin 150 | 3.0.2 151 | 152 | 153 | org.apache.maven.plugins 154 | maven-source-plugin 155 | 3.0.1 156 | 157 | 158 | org.apache.maven.plugins 159 | maven-javadoc-plugin 160 | 2.10.4 161 | 162 | 163 | org.apache.maven.plugins 164 | maven-gpg-plugin 165 | 1.6 166 | 167 | 168 | org.codehaus.mojo 169 | build-helper-maven-plugin 170 | 3.0.0 171 | 172 | 173 | 174 | 175 | 176 | org.eclipse.microprofile.maven 177 | microprofile-maven-build-extension 178 | true 179 | 180 | 181 | 182 | org.apache.maven.plugins 183 | maven-checkstyle-plugin 184 | 185 | 186 | verify-style 187 | process-classes 188 | 189 | check 190 | 191 | 192 | 193 | 194 | UTF-8 195 | true 196 | true 197 | true 198 | true 199 | true 200 | true 201 | 202 | 203 | 204 | 205 | 206 | 207 | 208 | 209 | 210 | 211 | 212 | 213 | 214 | 215 | 216 | 217 | 218 | 219 | 220 | 221 | 222 | 223 | 224 | 225 | 226 | 227 | 228 | 229 | 230 | 231 | 232 | 233 | 234 | 235 | 236 | 237 | 238 | 239 | 240 | 241 | 242 | 243 | 244 | 245 | 246 | 247 | 248 | 249 | 250 | 251 | 252 | 253 | 254 | 255 | 256 | 257 | 258 | 259 | 260 | 261 | 262 | 263 | 264 | 265 | 266 | 267 | 268 | 269 | 270 | 271 | 272 | 273 | 274 | 275 | 276 | org.apache.rat 277 | apache-rat-plugin 278 | 0.12 279 | 280 | 281 | rat-check 282 | 283 | check 284 | 285 | 286 | 287 | 288 | 289 | .travis.yml.* 290 | bnd.bnd 291 | *.log 292 | .checkstyle 293 | .factorypath 294 | .editorconfig 295 | 296 | 297 | 298 | 299 | 300 | 301 | 302 | 303 | 304 | release 305 | 306 | 307 | 308 | org.sonatype.plugins 309 | nexus-staging-maven-plugin 310 | 1.6.3 311 | true 312 | 313 | https://oss.sonatype.org/ 314 | ossrh 315 | false 316 | 317 | 318 | 319 | org.apache.maven.plugins 320 | maven-source-plugin 321 | 322 | 323 | attach-sources 324 | 325 | jar-no-fork 326 | 327 | 328 | 329 | 330 | 331 | org.apache.maven.plugins 332 | maven-javadoc-plugin 333 | 334 | 335 | attach-javadocs 336 | 337 | jar 338 | 339 | 340 | 341 | 342 | 343 | org.apache.maven.plugins 344 | maven-gpg-plugin 345 | 1.6 346 | 347 | 348 | sign-artifacts 349 | verify 350 | 351 | sign 352 | 353 | 354 | 355 | 356 | 357 | 358 | 359 | 360 | 361 | --------------------------------------------------------------------------------