Skip to content

Unification of config API #94

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
kyessenov opened this issue May 3, 2017 · 22 comments
Closed

Unification of config API #94

kyessenov opened this issue May 3, 2017 · 22 comments

Comments

@kyessenov
Copy link
Contributor

Some decisions from a meeting:

  1. We do not need transactional semantics for the config updates, a regular key value store is sufficient for our purpose in Mixer and Manager
  2. We may need to explore PATCH semantics for updates to allow long-lasting rollouts (since parent config might be concurrently updated).
  3. Need to unify the key naming for config artifacts, in particular separate the query for mixer artifacts from the id of the artifact.

@andraxylia @mandarjog @ayj

@ayj
Copy link
Contributor

ayj commented May 3, 2017

Open items that require further discussion (please add/remove as necessary):

  1. Versioning
  2. Validation
  3. Consistency guarantees
  4. Availability
  5. Performance

@kyessenov
Copy link
Contributor Author

kyessenov commented May 5, 2017

Proposal to unify config documents and config keys

After discussion with @mandarjog @andraxylia @ayj , it seems we can start unification from the consistent conceptual model of the config, putting storage, perf, versioning, validation, and roll-outs aside. We have a common theme in Manager and Mixer that configuration consists of individual documents:

  • route rules, destination policies, mesh config in Manager
  • policy rules in Mixer, individual aspects in rules
  • descriptors and adapter configuration in Mixer

The granularity of the document is dictated by two factors:

  • External factor: the user should be able to deploy an individual configuration setting as a single operation. For example, for Mixer that means applying a blacklist with a selector is an operation and should not involve multiple steps such as listing all rules, appending an elements, and then submitting a new list.
  • Internal factor: the boundary between selecting rules and selecting within rules should be conceptually simple. It seems that for Mixer rules that means that "selectors" belong to a configuration unit since it operates in the data plane; while "scope", "subject" and "ruleId" are used to find rules that need to be enforced, and are effectively selectors in the control plane. For Manager, "destination" field is the sole field for selecting rules and policies to apply.

Every configuration document should carry its metadata such as the "type" of the document, and a collection of "keys" that are used to select documents. All remaining fields compose the document content, as specified by the proto definitions: that means selector/aspects are mixer rule content, routes/matches are proxy rule content. The configuration key has to be unique globally, and that is the only guaranteed constraint that is easy to enforce with a key-value storage. We should utilize consistent fields such as "type" and "name" for uniformity.

Applying these ideas to current config protos, I suggest we structure them as follows:

  1. Route rule:
# meta: note the lack of namespace
type: route-rule
destination: a.default.svc.cluster.local
name: favorite-rule
# content
precedence: 2
match: 
  httpHeaders:
    version:
      exact: v1
route:
  - tags:
      version: v1

Sample REST: get /config/route-rule/a.default.svc.cluster.local/favorite-rule, list /config/route-rule/a.default.svc.cluster.local

  1. Destination policy:
# meta: note lack of namespace, name since only one policy per destination
type: destination-rule
destination: a.default.svc.cluster.local
# content
- tags:
     version: v1
  circuitBreaker:
     ...

Sample REST key: get /config/destination-rule/a.default.svc.cluster.local, list /config/destination-rule/

  1. Mesh config:
# meta: single object per installation
type: mesh-config
# content
discoveryAddress: istio-manager:8080
authPolicy: MUTUAL_TLS

Sample REST key: get /config/mesh-config

  1. Mixer rule:
# meta
type: mixer-rule
scope: global
subject: a.default.svc.cluster.local
name: clueless-pet-rule
# content
selector: source.labels["app"]=="reviews" && source.labels["version"] == "v3"
aspects:
  - kind: quota
    params:
      quota:
      - descriptorName: RequestCount
        maxAmount: 5
        expiration: 1s

Sample REST key: get /config/mixer-rule/global/a.default.svc.cluster.local/clueless-pet-rule

  1. Descriptor (need help from mixer folks)

@kyessenov
Copy link
Contributor Author

@mandarjog
Copy link
Contributor

mandarjog commented May 5, 2017

(edited by @kyessenov to fit the story of rate limit)

Mixer has the following additional types.

  1. Mixer adapter:
# meta: seems like unique per scope
type: mixer-adapter   
scope: global
name: shiny-quota-adaptor
# annotation: satisfies aspect quota
# aspects:
#  - quota
# content
plugin: memQuota # this can be a statically linked plug-in, a webhook, or an actual plugin
parameters:
  ...

REST key: get /config/mixer-adapter/global/shiny-quota-adaptor

edited by @mandarjog to align with api spec /scopes/{scope}/adapters/{impl_name}/{config_name}
@kyessenov: this misses my point of strict separation of content from name: memQuota does not belong to the name here; it's clearly an implementation detail. It's even called "impl".

I find it useful to think about this as a code statement that instantiates a plugin to satisfy an aspect:

global.shinyQuotaAdaptor := memQuota(parameters).(quota)
  1. Mixer descriptor:
# meta: seems like unique per scope
type: mixer-descriptor
scope: global
name: quota
# content
- name: RequestCount
  rate_limit: true

REST key: GET /config/mixer-descriptor/global/quota/RequestCount
edited by @mandarjog to align with api spec /scopes/{scope}/descriptors/{descriptor_type}/{descriptor_name}

@ZackButcher @geeknoid @douglas-reid does this make sense?

@geeknoid
Copy link
Contributor

geeknoid commented May 5, 2017 via email

@mandarjog
Copy link
Contributor

mandarjog commented May 5, 2017

type: mixer-aspects-version-rule  
scope: global
subject: ns.svc.cluster.local
name: rate-limit
version-rule:
- version: v1
   weight: 50
- version: v2
   weight: 50
type: mixer-adapters-version-rule   # note no subject
scope: global
name: rate-limit
version-rule:
- version: v1
   weight: 100
- version: v2
   weight: 0

@kyessenov
Copy link
Contributor Author

what is this last post about?

@mandarjog
Copy link
Contributor

mandarjog commented May 6, 2017 via email

@douglas-reid
Copy link
Contributor

Re: naming

is the name for the descriptor:

  • /config/mixer-descriptor/global/quota/RequestCount (or perhaps: config/mixer/descriptor/global/quota/RequestCount) or
  • RequestCount or
  • a completely different namespaced thing (like istio.io/api/request_count)
    ?

I feel like we want the resource names to be the first (and we should have that reflect in the documents themselves). At least, we should be consistent with: https://cloud.google.com/apis/design/resource_names

@kyessenov
Copy link
Contributor Author

kyessenov commented May 6, 2017

I'm not sure what the descriptor actually does. Is there significance to the name RequestCount, or it is just chosen for human-readability? The config key (the unique name) has to include the scope since Mixer's overriding semantics is encapsulated to the scope/subject hierarchy.

@kyessenov
Copy link
Contributor Author

@mandarjog please stop editing my examples :) I thought quota as a name is important since it's just a symbolic name to connect an aspect to an implementation. Why did you rename it to quota-default?

@douglas-reid
Copy link
Contributor

@kyessenov my naming thought applies to more than just descriptors.

in a bunch of these examples, we could leave out the lines for type, destination,scope, subject and just have one name that is the relative resource name.

So, name: /v1/config/mixer/rules/global/a.default.svc.cluster.local/clueless-pet-rule or name: /v1/config/destinations/a.default.svc.cluster.local.

@kyessenov
Copy link
Contributor Author

True, but I think there is benefit to structured names. It's immediately clear what list operations do if you break the name into resource type, and primary key properties.

@mandarjog
Copy link
Contributor

mandarjog commented May 6, 2017 via email

@kyessenov
Copy link
Contributor Author

Ok, updating examples to reflect that there could be multiple adaptors for an aspect.

@kyessenov
Copy link
Contributor Author

kyessenov commented May 6, 2017

Regarding expicit/implicit declaration of the fact that memQuota satisfies quota aspect: I think either way is fine with statically-linked plugins. However, for a separate system than mixer, it would be nice to be able to query adaptors for an aspect without having to run mixer to get that information.

@ayj
Copy link
Contributor

ayj commented May 6, 2017

The association of rule (route/destination/mixer) to service (destination/scope/subject) is currently encoded in the rule. Does it make sense for this association to be distinct resource?

An association would associate a service (or set of services via labels) to a set of rules based on service name, scope, etc. Associations could map one or more service to one or more rules. This composability might be easier user to manage than, for example, creating N rules with identical content except for the subject.

This might also be useful for versioning and staged rollouts where rules could be considered immutable and only the association is updated (or new associations added), e.g. Association maps 5% of services to RulesV1 and 95% to RulesV2.

@kyessenov
Copy link
Contributor Author

kyessenov commented May 6, 2017

I think it's an interesting idea to think about an "association rule" (presumably not an individual binding of a rule to a service but some rule saying "match these ____ services to these ____ rules"). Mixer design uses config overrides that are scoped by authority. A cluster admin rule overrides a service producer rule, which is reflected by the fact that the higher authority "scope" rule is used for the same "subject". I'm not sure how to express that easily with more general associations.

@ayj
Copy link
Contributor

ayj commented May 6, 2017

Yes, service-to-rule binding could be N:N. Wouldn't authority belong with the binding with this model? It could either be an explicit field in the binding resource or perhaps the binding themselves are organized under hierarchical scope/authority.

@kyessenov
Copy link
Contributor Author

kyessenov commented May 6, 2017

Is the below example similar to what you have in mind:

# meta
type: mixer-rule
name: clueless-pet-rule
# content
selector: source.labels["app"]=="reviews" && source.labels["version"] == "v3"
aspects:
  - kind: quota
    params:
      quota:
      - descriptorName: RequestCount
        maxAmount: 5
        expiration: 1s
# meta
type: mixer-rule-binding
name: apply-to-default
# content
selector: service == "*.default.svc.cluster.local" && rule == "clueless-pet-rule" # select which service and rules to apply
authority: root # utmost authority, root decision precedes decisions by lower authority

The two selectors are different: the rule selector applies to data path (request attributes) while the binding selector applies to the control plane (hierarchy of services and authorities, collection of rules). I'd want to hear a viable example where data path dictates the control plane rule - I can only come up with the following: "if a request contains a magic string, apply the rule that increases the quota for the rate limit".

ayj added a commit to ayj/pilot that referenced this issue May 9, 2017
Manager and mixer API server paths are not consistent. Manager path is
prefixed with Istio resource version (i.e. v1alpha1) and mixer path is
not. Short term workaround is to special case this behavior. Long term
solution is to unify API scheme and server implementations.

See istio/api#94 for long term tracking.
ayj added a commit to istio/old_pilot_repo that referenced this issue May 9, 2017
Manager and mixer API server paths are not consistent. Manager path is
prefixed with Istio resource version (i.e. v1alpha1) and mixer path is
not. Short term workaround is to special case this behavior. Long term
solution is to unify API scheme and server implementations.

See istio/api#94 for long term tracking.
@rshriram
Copy link
Member

While you guys discuss the high level constructs and ideas, how about doing the basic sensible cleanups that should have been there in the first place for istioctl ?
istio/old_pilot_repo#710

The command set is confusing to say the least. It blatantly and very obviously misses the simplest of usability aspects. Istioctl create and istioctl mixer rule create. I suggest we fix this first (hack or not) and then worry about all the internal formats.

@kyessenov
Copy link
Contributor Author

Abandoning since beta-mixer is completely revamping its terminology.

mandarjog pushed a commit to mandarjog/core3 that referenced this issue Oct 27, 2017
Manager and mixer API server paths are not consistent. Manager path is
prefixed with Istio resource version (i.e. v1alpha1) and mixer path is
not. Short term workaround is to special case this behavior. Long term
solution is to unify API scheme and server implementations.

See istio/api#94 for long term tracking.
incfly pushed a commit to incfly/api that referenced this issue Jun 13, 2018
* Point to googleapi in service control client. (istio#91)

* Point to googleapi in service control client.

* Use git repository for service-control-client.

* Merge latest changes from master (istio#104)

* Get attributes from envoy config. (istio#87)

* Send all attributes.

* Remove unused const strings.

* Address comment.

* updated SHA to point to newer envoy with RDS API feature (istio#94)

* Disable travis on stable branches (istio#96)

* Publish debug binaries (no release yet) (istio#98)

* Copies the binary instead of linking for release (istio#102)

* Extract quota config from service config. (istio#101)

* Add metric_cost in config.

* Remove group rules.

* Call loadQuotaConfig in config::create.

* Update latest update from master branch (istio#106)

* Get attributes from envoy config. (istio#87)

* Send all attributes.

* Remove unused const strings.

* Address comment.

* updated SHA to point to newer envoy with RDS API feature (istio#94)

* Disable travis on stable branches (istio#96)

* Publish debug binaries (no release yet) (istio#98)

* Copies the binary instead of linking for release (istio#102)

* Added quota contoll without the service control client library (istio#93)

* Added quota contoll without the service control client library

* Applied code review

* Applied code review

* Resolve conflicts

* Resolve conflicts

* Fixed format error reported by script/check-style

* Fixed a bug at Aggregated::GetAuthToken that causes Segmentation Fault

* Changed usage of template funcion

* Applied latest changes from the repo

* Applied latest changes from the repo

* Applied latest changes from the repo

* Adde comments

* Updated log information

* Applied istio#101

* Changed metric_cost_map to metric_cost_vector

* Fixed test case compilation error

* Fixed test case compilation error

* Add unit test for quota config. (istio#108)

* Add unit test for quota config.

* Add comments.

* Update test specifics.

* Merge latest changes from master branch (istio#112)

* Get attributes from envoy config. (istio#87)

* Send all attributes.

* Remove unused const strings.

* Address comment.

* updated SHA to point to newer envoy with RDS API feature (istio#94)

* Disable travis on stable branches (istio#96)

* Publish debug binaries (no release yet) (istio#98)

* Copies the binary instead of linking for release (istio#102)

* Not to use api_key if its service is not actived. (istio#109)

* If QuotaControl service is not available, return utils::Status::OK (istio#113)

* If QuotaControl service is not available, return utils::Status::OK

* Updated comment

* Return HTTP status code 429 on google.rpc.Code.RESOURCE_EXHAUSTED (istio#119)

* Fixed incorrectly resolved conflicts (istio#123)

* Added unit test cases for rate limiting (istio#124)

* Fixed incorrectly resolved conflicts

* Added unit test cases for rate limiting

* Added unit test cases for rate limiting

* Added unit test cases for rate limiting

* Added unit test cases for rate limiting

* Added unit test cases for rate limiting

* Added unit test cases for rate limiting

* Rename response.http.code (istio#125) (istio#128)

* Added handling of error code QUOTA_SYSTEM_UNAVAILABLE (istio#148)

* Integrated service control client library with quota cache aggregation (istio#149)

* Fixed error on merge (istio#151)

* Integrated service control client library with quota cache aggregation

* Fixed error on merge

* Fixed the compatibility issue with the latest update on esp (istio#152)

* Removed copied proto files (istio#208)

* Set default allocate quota request timeout to 1sec and applied latest service control client library change (istio#211)

* Merged key_restriction related changes from master (istio#213)

* Merge latest changes from master branch (istio#217)

* Not call report if decodeHeaders is not called. (istio#150)

* Update mixerclient with sync-ed grpc write and fail-fast. (istio#155)

* Update mixerclient with sync-ed write and fail-fast.

* Update to latest test.

* Update again

* Update envoy to PR553 (istio#156)

* Update envoy to PR553

* Update libevent to 2.1.8

* Uses a specific version of the Shared Pipeline lib (istio#158)

* Update lyft/envoy commit Id to latest. (istio#161)

* Update lyft/envoy commit Id to latest.

* Remove the comment about pull request

* Add new line - will delete in next commit.

* Update repositories.bzl (istio#169)

* Always set response latency (istio#172)

* Update mixerclient to sync_transport change. (istio#178)

* Use opaque config to turn on/off forward attribute and mixer filter (istio#179)

* Modify mixer filter

* Swap defaults

* Make the filter decoder only

* cache mixer disabled decision

* Fix a bug in opaque config change and test it out (istio#182)

* Fix a bug and test it out

* Update filter type

* Update README.md

* Update mixer client to mixer api with gogoproto. (istio#184)

* Move .bazelrc to tools/bazel.rc (istio#186)

* Move .bazelrc to tools/bazel.rc

* Update Jenkinsfile with latest version of pipeline

* Support apikey based traffic restriction (istio#189)

* b/36368559 support apikey based traffic restriction

* Fixed code formatting

* Fix crash in unreachable/overloaded RDS (istio#190)

* Add mixer client end to end integration test. (istio#177)

* Add mixer client end to end integration test.

* Split some repositories into a separate file.

* use real mixer for fake mixer_server.

* Test repository

* use mixer bzl file.

* Use mixer repositories

* Not to use mixer repository.

* Add return line at the end of WORKSPACE.

* Fix broken link (istio#193)

* Make quota call (istio#192)

* hookup quota call

* Make quota call.

* Update indent.

* Update envoy and update configs (istio#195)

* Update envoy and update configs

* Use gcc-4.9 for travis

* Use bazel 0.4.5

* Fix SHA of lightstep-tracer-common

* Enable check cache and refactory mixer config loading  (istio#197)

* Refactory the mixer config loading.

* fix format

* Add integration test.

* updated README.md

* s/send/sent/

* Split into separate tests. (istio#201)

* Update README on how to enable check cache. (istio#204)

* Update README on how to enable check cache.

* Update the comment.

* build: support Envoy native Bazel build. (istio#210)

* build: support Envoy native Bazel build.

This patch switches the Envoy build from src/envoy/repositories.bzl to
using the upstream native build.

See envoyproxy/envoy#663 for the corresponding changes
on the Envoy side.

* Use Envoy master with BUILD.wip rename merged.

* Fix clang-format issues.

* Fixes bazel.rc issues (istio#212)

* Fixes bazel rc issues

* Update Jenkins to latest pipeline version

* Updated the commit id of cloudendpoints/service-control-client-cxx (istio#218)

* Update commitid of cloudendpoints/service-control-client-cxx repo (istio#220)
incfly pushed a commit to incfly/api that referenced this issue Jun 13, 2018
* Created check security rules file and a few dummy/helper functions. (istio#40)

* Created check security rules file and a few dummy/helper functions.

And added it to check work flow.

* Fix format.

* Firebase: Merge from master. (istio#53)

* Simple TCP server to show how to retrieve original dest IP:port after an iptables redirect (istio#38)

* Simple TCP server to show how to retrieve original dest IP:port after an iptables redirect

* Fixed style.

* Rebase Envoy (istio#41)

* Update prototype to use iptables (istio#42)

* Rebase to fixed Envoy (istio#43)

* Handle HEAD request. (istio#34)

* Handle HEAD request.

* Try with GET if HEAD fails.

* Address comments.

* Format file.

* Expose bazel target (istio#48)

* Try again (istio#49)

* Enable ESP to invoke Firebase Security rules. (istio#54)

* Enable ESP to invoke Firebase Security rules.

* Address code review comments.

* Remove some debug logs

* Add proto file to capture TestRulesetRequest.

* clang-format files

* Resolve a merge issue with previous commit

* Allow security rules to disabled via serverconfig

* format file

* Addressed Wayne's review comments.

* Add firebase server to Server Config.

* Address Lizan's review comments

* Address review comments.

* Disable check rules service by default.

* Address more review comments.

* Fix a check.

* Delete unwanted constant.

* Address Wayne's comments and add a simple config test.

* Address a review comment.

* Add negative test case for config

* Address code review

* Remove unwanted const std::string

* Merge from master into firebase (istio#65)

* Simple TCP server to show how to retrieve original dest IP:port after an iptables redirect (istio#38)

* Simple TCP server to show how to retrieve original dest IP:port after an iptables redirect

* Fixed style.

* Rebase Envoy (istio#41)

* Update prototype to use iptables (istio#42)

* Rebase to fixed Envoy (istio#43)

* Handle HEAD request. (istio#34)

* Handle HEAD request.

* Try with GET if HEAD fails.

* Address comments.

* Format file.

* Expose bazel target (istio#48)

* Try again (istio#49)

* Integrate with mixer client. (istio#55)

* Integrate with mixer client.

* Restore  repositories.bzl back.

* Add originIp and originHost attributes. (istio#56)

* Add uuid-dev dependency in README.md (istio#45)

* Extract originIp and OriginHost. (istio#57)

* Extract originIp and OriginHost.

* Make header x-forwarded-host const.

* Update buckets for UI. (istio#58)

* Update buckets for UI.

* Only update time_distribution.

* Add targetService attribute. (istio#59)

* Use envoy new access_log handler for sending Report. (istio#60)

* use access_log handler.

* Not to use Loggable base class.

* Update to the latest envoy with istio#396. (istio#61)

* Fix tclap dependency fetching error (istio#62)

* Update the auth checke to use service.experimental.authorization.providerwq!

* Update the auth check to use service.experimental.authorization.provider

* Update the auth check to use service.experimental.authorization.provider (istio#67)

* Update the auth check to use service.experimental.authorization.provider

* Address comments and revert accidental change.

* Remove unnecessary added accidentally.

* Another patch

* fix the logic

* fix lint

* Fix broken test and add unit tests

* Fix comments

* Fix style check

* revert style for raw string

* fix small lint

* fix small lint

* fix small lint

* Unit tests for check security rules. (istio#75)

* Unit tests for check security rules.

* format

* Address review comments.

* Fix typos

* Merge from master to firebase (istio#143)

* Simple TCP server to show how to retrieve original dest IP:port after an iptables redirect (istio#38)

* Simple TCP server to show how to retrieve original dest IP:port after an iptables redirect

* Fixed style.

* Rebase Envoy (istio#41)

* Update prototype to use iptables (istio#42)

* Rebase to fixed Envoy (istio#43)

* Handle HEAD request. (istio#34)

* Handle HEAD request.

* Try with GET if HEAD fails.

* Address comments.

* Format file.

* Expose bazel target (istio#48)

* Try again (istio#49)

* Integrate with mixer client. (istio#55)

* Integrate with mixer client.

* Restore  repositories.bzl back.

* Add originIp and originHost attributes. (istio#56)

* Add uuid-dev dependency in README.md (istio#45)

* Extract originIp and OriginHost. (istio#57)

* Extract originIp and OriginHost.

* Make header x-forwarded-host const.

* Update buckets for UI. (istio#58)

* Update buckets for UI.

* Only update time_distribution.

* Add targetService attribute. (istio#59)

* Use envoy new access_log handler for sending Report. (istio#60)

* use access_log handler.

* Not to use Loggable base class.

* Update to the latest envoy with istio#396. (istio#61)

* Fix tclap dependency fetching error (istio#62)

* Integrate mixer client directly with envoy. (istio#66)

* Integrate mixer client directly with envoy.

* Send response header in Report.

* rename filter name from esp to mixer.

* add README.

* Add release binary script. (istio#68)

* Push tar.gz to GCS (istio#69)

* Push tar.gz to GCS

* Rename envoy_esp

* Remove mixer_client from api_manager. (istio#72)

* Update mixer client SHA. (istio#74)

* Update readme. (istio#73)

* Adds Jenkinsfile and updates release-binary to create a SHA. (istio#71)

* Adds Jenkinsfile and update release-binary
* Update Jenkinsfile and gitignore
* Fixes typo and use normal build Node
* Uses default bazel config
* Using batch mode
* Update bazel memory settings
* Do not use Jenkins bazel env
* Set .bazelrc for postsubmit

* Update grpc and protobuf (istio#70)

* protobuf v3.2.0
* grpc v1.1.1
* Align auth lib with grpc 1.1.1

* Add sourceService. (istio#78)

* Add script to build docker image. (istio#77)

* Add script to build docker image.

* Add start_envoy for docker image.

* Use official attribute names (istio#80)

* Use official attribute names

* fix format

* Creates a KEY for mixer client dep. Updates release-binary (istio#79)

* Updated mixer repo to use a key for commit

* release-binary skip build if file exists.

* Update src/envoy/mixer/README. (istio#82)

* Fix src/envoy/mixer/README.md (istio#85)

* Get attributes from envoy config. (istio#87)

* Send all attributes.

* Remove unused const strings.

* Address comment.

* updated SHA to point to newer envoy with RDS API feature (istio#94)

* Disable travis on stable branches (istio#96)

* Publish debug binaries (no release yet) (istio#98)

* Copies the binary instead of linking for release (istio#102)

* Not to use api_key if its service is not actived. (istio#109)

* Update envoy and add c-ares (istio#107)

* Update envoy and add c-ares depedencies

* Update release script with debug and normal binary

* remove debug ls

* formatting

* Send StatusCode Attributes to Mixer. (istio#110)

* Add send_attribute filter. (istio#115)

* Add send_attribute filter.

* Fix format

* rename variable serialized_attributes_

* Address the comments.

* Fail request if api_key is not valid. (istio#116)

* Fail request if api_key is not valid.

* Format code.

* Update comments.

* Address comment.

* Rename response.http.code (istio#125)

* Send headers as string map. (istio#129)

* Send headers as string map.

* Remove origin.ip and origin.host.

* Fix format

* unify bazel's docker build targets with other istio repos (istio#127)

* update base debug docker image reference (istio#133)

* Update postsubmit to create docker images (istio#132)

* Adding config release for bazel build (istio#135)

* Fix mixer client crash. (istio#136)

* Get mixerclient with response parsing. (istio#138)

* Update nghttp2 to sync with envoy (istio#140)

* Fix src/envoy/mixer/README.md

* Update nghttp2 to sync with envoy

* update

* fix typo

* Merge from master to firebase (istio#159)

* Simple TCP server to show how to retrieve original dest IP:port after an iptables redirect (istio#38)

* Simple TCP server to show how to retrieve original dest IP:port after an iptables redirect

* Fixed style.

* Rebase Envoy (istio#41)

* Update prototype to use iptables (istio#42)

* Rebase to fixed Envoy (istio#43)

* Handle HEAD request. (istio#34)

* Handle HEAD request.

* Try with GET if HEAD fails.

* Address comments.

* Format file.

* Expose bazel target (istio#48)

* Try again (istio#49)

* Integrate with mixer client. (istio#55)

* Integrate with mixer client.

* Restore  repositories.bzl back.

* Add originIp and originHost attributes. (istio#56)

* Add uuid-dev dependency in README.md (istio#45)

* Extract originIp and OriginHost. (istio#57)

* Extract originIp and OriginHost.

* Make header x-forwarded-host const.

* Update buckets for UI. (istio#58)

* Update buckets for UI.

* Only update time_distribution.

* Add targetService attribute. (istio#59)

* Use envoy new access_log handler for sending Report. (istio#60)

* use access_log handler.

* Not to use Loggable base class.

* Update to the latest envoy with istio#396. (istio#61)

* Fix tclap dependency fetching error (istio#62)

* Integrate mixer client directly with envoy. (istio#66)

* Integrate mixer client directly with envoy.

* Send response header in Report.

* rename filter name from esp to mixer.

* add README.

* Add release binary script. (istio#68)

* Push tar.gz to GCS (istio#69)

* Push tar.gz to GCS

* Rename envoy_esp

* Remove mixer_client from api_manager. (istio#72)

* Update mixer client SHA. (istio#74)

* Update readme. (istio#73)

* Adds Jenkinsfile and updates release-binary to create a SHA. (istio#71)

* Adds Jenkinsfile and update release-binary
* Update Jenkinsfile and gitignore
* Fixes typo and use normal build Node
* Uses default bazel config
* Using batch mode
* Update bazel memory settings
* Do not use Jenkins bazel env
* Set .bazelrc for postsubmit

* Update grpc and protobuf (istio#70)

* protobuf v3.2.0
* grpc v1.1.1
* Align auth lib with grpc 1.1.1

* Add sourceService. (istio#78)

* Add script to build docker image. (istio#77)

* Add script to build docker image.

* Add start_envoy for docker image.

* Use official attribute names (istio#80)

* Use official attribute names

* fix format

* Creates a KEY for mixer client dep. Updates release-binary (istio#79)

* Updated mixer repo to use a key for commit

* release-binary skip build if file exists.

* Update src/envoy/mixer/README. (istio#82)

* Fix src/envoy/mixer/README.md (istio#85)

* Get attributes from envoy config. (istio#87)

* Send all attributes.

* Remove unused const strings.

* Address comment.

* updated SHA to point to newer envoy with RDS API feature (istio#94)

* Disable travis on stable branches (istio#96)

* Publish debug binaries (no release yet) (istio#98)

* Copies the binary instead of linking for release (istio#102)

* Not to use api_key if its service is not actived. (istio#109)

* Update envoy and add c-ares (istio#107)

* Update envoy and add c-ares depedencies

* Update release script with debug and normal binary

* remove debug ls

* formatting

* Send StatusCode Attributes to Mixer. (istio#110)

* Add send_attribute filter. (istio#115)

* Add send_attribute filter.

* Fix format

* rename variable serialized_attributes_

* Address the comments.

* Fail request if api_key is not valid. (istio#116)

* Fail request if api_key is not valid.

* Format code.

* Update comments.

* Address comment.

* Rename response.http.code (istio#125)

* Send headers as string map. (istio#129)

* Send headers as string map.

* Remove origin.ip and origin.host.

* Fix format

* unify bazel's docker build targets with other istio repos (istio#127)

* update base debug docker image reference (istio#133)

* Update postsubmit to create docker images (istio#132)

* Adding config release for bazel build (istio#135)

* Fix mixer client crash. (istio#136)

* Get mixerclient with response parsing. (istio#138)

* Update nghttp2 to sync with envoy (istio#140)

* Fix src/envoy/mixer/README.md

* Update nghttp2 to sync with envoy

* update

* fix typo

* Populate origin.user attribute from the SAN field of client cert (istio#142)

* Test

* test

* test

* revert file

* address comments

* test

* fix typo

* fix format

* fix format

* Update to latest mixer_client. (istio#145)

* Update to latest mixer_client.

* Updated the sha.

* Not call report if decodeHeaders is not called. (istio#150)

* Update mixerclient with sync-ed grpc write and fail-fast. (istio#155)

* Update mixerclient with sync-ed write and fail-fast.

* Update to latest test.

* Update again

* Update envoy to PR553 (istio#156)

* Update envoy to PR553

* Update libevent to 2.1.8

* Update the Commit id for envoy

* Allow for HTTP based function from Firebase rules (istio#202)

* Allow for HTTP based function from Firebase rules

* Fix code style check

* Added more comments.

* Fix style issues.

* Address code review comments from Limin and Lizan.

* Add more comments and address CR comments.

* Fix a typo.

* Address Wayne's CR comments.

* Merge from master to firebase (istio#237)

* Simple TCP server to show how to retrieve original dest IP:port after an iptables redirect (istio#38)

* Simple TCP server to show how to retrieve original dest IP:port after an iptables redirect

* Fixed style.

* Rebase Envoy (istio#41)

* Update prototype to use iptables (istio#42)

* Rebase to fixed Envoy (istio#43)

* Handle HEAD request. (istio#34)

* Handle HEAD request.

* Try with GET if HEAD fails.

* Address comments.

* Format file.

* Expose bazel target (istio#48)

* Try again (istio#49)

* Integrate with mixer client. (istio#55)

* Integrate with mixer client.

* Restore  repositories.bzl back.

* Add originIp and originHost attributes. (istio#56)

* Add uuid-dev dependency in README.md (istio#45)

* Extract originIp and OriginHost. (istio#57)

* Extract originIp and OriginHost.

* Make header x-forwarded-host const.

* Update buckets for UI. (istio#58)

* Update buckets for UI.

* Only update time_distribution.

* Add targetService attribute. (istio#59)

* Use envoy new access_log handler for sending Report. (istio#60)

* use access_log handler.

* Not to use Loggable base class.

* Update to the latest envoy with istio#396. (istio#61)

* Fix tclap dependency fetching error (istio#62)

* Integrate mixer client directly with envoy. (istio#66)

* Integrate mixer client directly with envoy.

* Send response header in Report.

* rename filter name from esp to mixer.

* add README.

* Add release binary script. (istio#68)

* Push tar.gz to GCS (istio#69)

* Push tar.gz to GCS

* Rename envoy_esp

* Remove mixer_client from api_manager. (istio#72)

* Update mixer client SHA. (istio#74)

* Update readme. (istio#73)

* Adds Jenkinsfile and updates release-binary to create a SHA. (istio#71)

* Adds Jenkinsfile and update release-binary
* Update Jenkinsfile and gitignore
* Fixes typo and use normal build Node
* Uses default bazel config
* Using batch mode
* Update bazel memory settings
* Do not use Jenkins bazel env
* Set .bazelrc for postsubmit

* Update grpc and protobuf (istio#70)

* protobuf v3.2.0
* grpc v1.1.1
* Align auth lib with grpc 1.1.1

* Add sourceService. (istio#78)

* Add script to build docker image. (istio#77)

* Add script to build docker image.

* Add start_envoy for docker image.

* Use official attribute names (istio#80)

* Use official attribute names

* fix format

* Creates a KEY for mixer client dep. Updates release-binary (istio#79)

* Updated mixer repo to use a key for commit

* release-binary skip build if file exists.

* Update src/envoy/mixer/README. (istio#82)

* Fix src/envoy/mixer/README.md (istio#85)

* Get attributes from envoy config. (istio#87)

* Send all attributes.

* Remove unused const strings.

* Address comment.

* updated SHA to point to newer envoy with RDS API feature (istio#94)

* Disable travis on stable branches (istio#96)

* Publish debug binaries (no release yet) (istio#98)

* Copies the binary instead of linking for release (istio#102)

* Not to use api_key if its service is not actived. (istio#109)

* Update envoy and add c-ares (istio#107)

* Update envoy and add c-ares depedencies

* Update release script with debug and normal binary

* remove debug ls

* formatting

* Send StatusCode Attributes to Mixer. (istio#110)

* Add send_attribute filter. (istio#115)

* Add send_attribute filter.

* Fix format

* rename variable serialized_attributes_

* Address the comments.

* Fail request if api_key is not valid. (istio#116)

* Fail request if api_key is not valid.

* Format code.

* Update comments.

* Address comment.

* Rename response.http.code (istio#125)

* Send headers as string map. (istio#129)

* Send headers as string map.

* Remove origin.ip and origin.host.

* Fix format

* unify bazel's docker build targets with other istio repos (istio#127)

* update base debug docker image reference (istio#133)

* Update postsubmit to create docker images (istio#132)

* Adding config release for bazel build (istio#135)

* Fix mixer client crash. (istio#136)

* Get mixerclient with response parsing. (istio#138)

* Update nghttp2 to sync with envoy (istio#140)

* Fix src/envoy/mixer/README.md

* Update nghttp2 to sync with envoy

* update

* fix typo

* Populate origin.user attribute from the SAN field of client cert (istio#142)

* Test

* test

* test

* revert file

* address comments

* test

* fix typo

* fix format

* fix format

* Update to latest mixer_client. (istio#145)

* Update to latest mixer_client.

* Updated the sha.

* Not call report if decodeHeaders is not called. (istio#150)

* Update mixerclient with sync-ed grpc write and fail-fast. (istio#155)

* Update mixerclient with sync-ed write and fail-fast.

* Update to latest test.

* Update again

* Update envoy to PR553 (istio#156)

* Update envoy to PR553

* Update libevent to 2.1.8

* Uses a specific version of the Shared Pipeline lib (istio#158)

* Update lyft/envoy commit Id to latest. (istio#161)

* Update lyft/envoy commit Id to latest.

* Remove the comment about pull request

* Add new line - will delete in next commit.

* Update repositories.bzl (istio#169)

* Always set response latency (istio#172)

* Update mixerclient to sync_transport change. (istio#178)

* Use opaque config to turn on/off forward attribute and mixer filter (istio#179)

* Modify mixer filter

* Swap defaults

* Make the filter decoder only

* cache mixer disabled decision

* Fix a bug in opaque config change and test it out (istio#182)

* Fix a bug and test it out

* Update filter type

* Update README.md

* Update mixer client to mixer api with gogoproto. (istio#184)

* Move .bazelrc to tools/bazel.rc (istio#186)

* Move .bazelrc to tools/bazel.rc

* Update Jenkinsfile with latest version of pipeline

* Support apikey based traffic restriction (istio#189)

* b/36368559 support apikey based traffic restriction

* Fixed code formatting

* Fix crash in unreachable/overloaded RDS (istio#190)

* Add mixer client end to end integration test. (istio#177)

* Add mixer client end to end integration test.

* Split some repositories into a separate file.

* use real mixer for fake mixer_server.

* Test repository

* use mixer bzl file.

* Use mixer repositories

* Not to use mixer repository.

* Add return line at the end of WORKSPACE.

* Fix broken link (istio#193)

* Make quota call (istio#192)

* hookup quota call

* Make quota call.

* Update indent.

* Update envoy and update configs (istio#195)

* Update envoy and update configs

* Use gcc-4.9 for travis

* Use bazel 0.4.5

* Fix SHA of lightstep-tracer-common

* Enable check cache and refactory mixer config loading  (istio#197)

* Refactory the mixer config loading.

* fix format

* Add integration test.

* updated README.md

* s/send/sent/

* Split into separate tests. (istio#201)

* Update README on how to enable check cache. (istio#204)

* Update README on how to enable check cache.

* Update the comment.

* build: support Envoy native Bazel build. (istio#210)

* build: support Envoy native Bazel build.

This patch switches the Envoy build from src/envoy/repositories.bzl to
using the upstream native build.

See envoyproxy/envoy#663 for the corresponding changes
on the Envoy side.

* Use Envoy master with BUILD.wip rename merged.

* Fix clang-format issues.

* Fixes bazel.rc issues (istio#212)

* Fixes bazel rc issues

* Update Jenkins to latest pipeline version

* Fix go build (istio#224)

* Use TranscoderInputStream to reduce confusion around ByteCount() (istio#225)

* Add TranscoderInputStream to reduce confusion

* fix_format

* Merge latest changes from rate_limiting to master (istio#221)

* Point to googleapi in service control client. (istio#91)

* Point to googleapi in service control client.

* Use git repository for service-control-client.

* Merge latest changes from master (istio#104)

* Get attributes from envoy config. (istio#87)

* Send all attributes.

* Remove unused const strings.

* Address comment.

* updated SHA to point to newer envoy with RDS API feature (istio#94)

* Disable travis on stable branches (istio#96)

* Publish debug binaries (no release yet) (istio#98)

* Copies the binary instead of linking for release (istio#102)

* Extract quota config from service config. (istio#101)

* Add metric_cost in config.

* Remove group rules.

* Call loadQuotaConfig in config::create.

* Update latest update from master branch (istio#106)

* Get attributes from envoy config. (istio#87)

* Send all attributes.

* Remove unused const strings.

* Address comment.

* updated SHA to point to newer envoy with RDS API feature (istio#94)

* Disable travis on stable branches (istio#96)

* Publish debug binaries (no release yet) (istio#98)

* Copies the binary instead of linking for release (istio#102)

* Added quota contoll without the service control client library (istio#93)

* Added quota contoll without the service control client library

* Applied code review

* Applied code review

* Resolve conflicts

* Resolve conflicts

* Fixed format error reported by script/check-style

* Fixed a bug at Aggregated::GetAuthToken that causes Segmentation Fault

* Changed usage of template funcion

* Applied latest changes from the repo

* Applied latest changes from the repo

* Applied latest changes from the repo

* Adde comments

* Updated log information

* Applied istio#101

* Changed metric_cost_map to metric_cost_vector

* Fixed test case compilation error

* Fixed test case compilation error

* Add unit test for quota config. (istio#108)

* Add unit test for quota config.

* Add comments.

* Update test specifics.

* Merge latest changes from master branch (istio#112)

* Get attributes from envoy config. (istio#87)

* Send all attributes.

* Remove unused const strings.

* Address comment.

* updated SHA to point to newer envoy with RDS API feature (istio#94)

* Disable travis on stable branches (istio#96)

* Publish debug binaries (no release yet) (istio#98)

* Copies the binary instead of linking for release (istio#102)

* Not to use api_key if its service is not actived. (istio#109)

* If QuotaControl service is not available, return utils::Status::OK (istio#113)

* If QuotaControl service is not available, return utils::Status::OK

* Updated comment

* Return HTTP status code 429 on google.rpc.Code.RESOURCE_EXHAUSTED (istio#119)

* Fixed incorrectly resolved conflicts (istio#123)

* Added unit test cases for rate limiting (istio#124)

* Fixed incorrectly resolved conflicts

* Added unit test cases for rate limiting

* Added unit test cases for rate limiting

* Added unit test cases for rate limiting

* Added unit test cases for rate limiting

* Added unit test cases for rate limiting

* Added unit test cases for rate limiting

* Rename response.http.code (istio#125) (istio#128)

* Added handling of error code QUOTA_SYSTEM_UNAVAILABLE (istio#148)

* Integrated service control client library with quota cache aggregation (istio#149)

* Fixed error on merge (istio#151)

* Integrated service control client library with quota cache aggregation

* Fixed error on merge

* Fixed the compatibility issue with the latest update on esp (istio#152)

* Removed copied proto files (istio#208)

* Set default allocate quota request timeout to 1sec and applied latest service control client library change (istio#211)

* Merged key_restriction related changes from master (istio#213)

* Merge latest changes from master branch (istio#217)

* Not call report if decodeHeaders is not called. (istio#150)

* Update mixerclient with sync-ed grpc write and fail-fast. (istio#155)

* Update mixerclient with sync-ed write and fail-fast.

* Update to latest test.

* Update again

* Update envoy to PR553 (istio#156)

* Update envoy to PR553

* Update libevent to 2.1.8

* Uses a specific version of the Shared Pipeline lib (istio#158)

* Update lyft/envoy commit Id to latest. (istio#161)

* Update lyft/envoy commit Id to latest.

* Remove the comment about pull request

* Add new line - will delete in next commit.

* Update repositories.bzl (istio#169)

* Always set response latency (istio#172)

* Update mixerclient to sync_transport change. (istio#178)

* Use opaque config to turn on/off forward attribute and mixer filter (istio#179)

* Modify mixer filter

* Swap defaults

* Make the filter decoder only

* cache mixer disabled decision

* Fix a bug in opaque config change and test it out (istio#182)

* Fix a bug and test it out

* Update filter type

* Update README.md

* Update mixer client to mixer api with gogoproto. (istio#184)

* Move .bazelrc to tools/bazel.rc (istio#186)

* Move .bazelrc to tools/bazel.rc

* Update Jenkinsfile with latest version of pipeline

* Support apikey based traffic restriction (istio#189)

* b/36368559 support apikey based traffic restriction

* Fixed code formatting

* Fix crash in unreachable/overloaded RDS (istio#190)

* Add mixer client end to end integration test. (istio#177)

* Add mixer client end to end integration test.

* Split some repositories into a separate file.

* use real mixer for fake mixer_server.

* Test repository

* use mixer bzl file.

* Use mixer repositories

* Not to use mixer repository.

* Add return line at the end of WORKSPACE.

* Fix broken link (istio#193)

* Make quota call (istio#192)

* hookup quota call

* Make quota call.

* Update indent.

* Update envoy and update configs (istio#195)

* Update envoy and update configs

* Use gcc-4.9 for travis

* Use bazel 0.4.5

* Fix SHA of lightstep-tracer-common

* Enable check cache and refactory mixer config loading  (istio#197)

* Refactory the mixer config loading.

* fix format

* Add integration test.

* updated README.md

* s/send/sent/

* Split into separate tests. (istio#201)

* Update README on how to enable check cache. (istio#204)

* Update README on how to enable check cache.

* Update the comment.

* build: support Envoy native Bazel build. (istio#210)

* build: support Envoy native Bazel build.

This patch switches the Envoy build from src/envoy/repositories.bzl to
using the upstream native build.

See envoyproxy/envoy#663 for the corresponding changes
on the Envoy side.

* Use Envoy master with BUILD.wip rename merged.

* Fix clang-format issues.

* Fixes bazel.rc issues (istio#212)

* Fixes bazel rc issues

* Update Jenkins to latest pipeline version

* Updated the commit id of cloudendpoints/service-control-client-cxx (istio#218)

* Update commitid of cloudendpoints/service-control-client-cxx repo (istio#220)

* Send delta metrics for intermediate reports. (istio#219)

* Send delta metrics for intermediate reports.

* Move last_request_bytes/last_response_bytes to RequestContext.

* Handle final report.

* Address comment.

* Update attributes to match the canonical attribute list. (istio#232)

* Update response.http.code to response.code and response.latency to response.duration to line up with the canonical attributes in istio/istio.github.io/docs/concepts/attributes.md

* Format according to clang-format

* Add envoy Buffer based TranscoderInputStream (istio#231)

* Add envoy Buffer based TranscoderInputStream

* fix format

* A few doc changes for consistency across repos. (istio#235)

* Add repositories.bzl

* Added missing export setting in bazel configuration (istio#236)

* Added export missing in bazel configuration

* Added export missing in bazel configuration

* Allow HTTP functions in firebase rules to specify audience (istio#244)

* Allow HTTP functions in firebase rules to specify audience

* Allow GetAuthToken to ignore cache and fix style checks.

* Fix GetAuthToken

* Address Wayne's comment

* Check for empty response body

* Remove .bazelrc.jenkins file not present in the master branch.

* Remove forward_attribute_filter.cc not present in master.
incfly pushed a commit to incfly/api that referenced this issue Jun 13, 2018
nacx pushed a commit to nacx/api that referenced this issue Feb 23, 2022
* Add elastic-credentials to api docs (istio#94)

* ca-host comment

Co-authored-by: Marc Cirauqui <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

6 participants