Git Product home page Git Product logo

flomesh-io / eriecanal Goto Github PK

View Code? Open in Web Editor NEW
52.0 7.0 3.0 5 MB

ErieCanal is a MCS(multi cluster service https://github.com/kubernetes-sigs/mcs-api) implementation, provides MCS, Ingress, Egress, GatewayAPI for Kubernetes clusters.

License: Apache License 2.0

Makefile 2.01% Go 87.99% JavaScript 4.31% Shell 3.14% Smarty 2.02% Dockerfile 0.53%
egress egress-gateway ingress ingress-controller multicluster gateway-api mcs-api

eriecanal's Introduction

ErieCanal

GitHub GitHub go.mod Go version

GitHub release (latest by date including pre-releases) GitHub tag (latest SemVer pre-release) GitHub (Pre-)Release Date

ErieCanal is a Kubernetes Multi-Cluster Service API (MCS) implementation, and provides MCS, Ingress, Egress, and Gateway API for Kubernetes clusters.

ErieCanal is an implementation of Kubernetes Multi-Cluster Service API (MCS) that depends on a service mesh and Ingress to provide service registration and discovery capabilities across k8s clusters. When using ErieCanal as an MCS provider, it must be used in conjunction with osm-edge, which provides east-west traffic flow capabilities, while ErieCanal provides north-south traffic flow capabilities. ErieCanal also provides the ability to register and discover services across clusters. In the MCS multi-cluster mode, ErieCanal currently supports three traffic modes for Kubernetes clusters that join the ClusterSet: Locality, Failover, and ActiveActive.

In the Locality mode, which is the default configuration, traffic is scheduled based on proximity within the local cluster or can be scheduled to a specific cluster based on topology.In the ActiveActive mode, the cluster provides the same traffic processing capabilities as service export (ServiceExport) using load balancing. In the Failover mode, the importing service (ServiceImport) cluster provides disaster recovery capabilities for the exporting service (ServiceExport) cluster. ErieCanal's implementation does not require the underlying Kubernetes to use a special network and does not require a unified two-layer or three-layer network between the multi-cluster networks. Therefore, it is generally applicable to Kubernetes clusters of various types of networks.

Architecture


MCS Bridge - eBPF based approach (coming soon)

mcs bridge


ErieCanal + Service Mesh based approach (backward compatibility)

ErieCanal Architecture diagram


Install

This chart bootstraps a ErieCanal deployment on a Kubernetes cluster using the Helm package manager.

Prerequisites

  • Kubernetes 1.19+

Installing the Chart

To install the chart with the release name ec run:

helm repo add ec https://ec.flomesh.io
helm install ec ec/erie-canal --namespace erie-canal --create-namespace

The command deploys ErieCanal on the Kubernetes cluster using the default configuration in namespace erie-canal and creates the namespace if it doesn't exist. The configuration section lists the parameters that can be configured during installation.

As soon as all pods are up and running, you can start to evaluate ErieCanal.

Uninstalling the Chart

To uninstall the ec deployment run:

helm uninstall ec --namespace erie-canal

The command removes all the Kubernetes components associated with the chart and deletes the release.

Configuration

Specify each parameter using the --set key=value[,key=value] argument to helm install. For example,

helm install ec ec/erie-canal \
  --namespace erie-canal \
  --create-namespace \
  --set ec.image.pullPolicy=Always

Alternatively, a YAML file that specifies the values for the parameters can be provided while installing the chart. For example,

helm install ec ec/erie-canal \
  --namespace erie-canal \
  --create-namespace \
  -f values-override.yaml

Demos

Following the demo here, have a quick view of ErieCanal.

eriecanal's People

Contributors

addozhang avatar dependabot[bot] avatar naqvis avatar reaver-flomesh avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar

eriecanal's Issues

feat: migrate latest fsm changes

Please describe the Improvement and/or Feature Request

Scope (please mark with X where applicable)

  • New Functionality [ ]
  • Install [ ]
  • Gateway API - GatewayClass [ ]
  • Gateway API - Gateway [ ]
  • Gateway API - HTTPRoute [ ]
  • Gateway API - TLSRoute [ ]
  • Gateway API - TCPRoute [ ]
  • Gateway API - UDPRoute [ ]
  • Gateway API - PolicyReference [ ]
  • Ingress [ ]
  • Egress [ ]
  • MultiCluster [ ]
  • PIPY Control Plane [ ]
  • PIPY Script/Config [ ]
  • CLI Tool [ ]
  • Metrics [ ]
  • Certificate Management [ ]
  • Sidecar Injection [ ]
  • Logging [ ]
  • Debugging [ ]
  • Tests [ ]
  • Demo [ ]
  • CI System [ ]
  • Project Release [ ]

Possible use cases

fix: pipy crash when reloading codebase

Bug description:

Affected area (please mark with X where applicable):

  • Install [ ]
  • Gateway API - GatewayClass [ ]
  • Gateway API - Gateway [ ]
  • Gateway API - HTTPRoute [ ]
  • Gateway API - TLSRoute [ ]
  • Gateway API - TCPRoute [ ]
  • Gateway API - UDPRoute [ ]
  • Gateway API - PolicyReference [ ]
  • Ingress [ ]
  • Egress [ ]
  • MultiCluster [ ]
  • PIPY Control Plane [ ]
  • PIPY Script/Config [ ]
  • CLI Tool [ ]
  • Metrics [ ]
  • Certificate Management [ ]
  • Sidecar Injection [ ]
  • Logging [ ]
  • Debugging [ ]
  • Tests [ ]
  • Demo [ ]
  • CI System [ ]

Expected behavior:

Steps to reproduce the bug (as precisely as possible):

How was ErieCanal installed?:

Anything else we need to know?:

Bug report archive:

Environment:

  • ErieCanal version (use erie-canal version):
  • Kubernetes version (use kubectl version):
  • Size of cluster (number of worker nodes in the cluster):
  • Others:

fix: inconsistency in values.schema.json

Please describe the Improvement and/or Feature Request

Scope (please mark with X where applicable)

  • New Functionality [ ]
  • Install [x]
  • Gateway API - GatewayClass [ ]
  • Gateway API - Gateway [ ]
  • Gateway API - HTTPRoute [ ]
  • Gateway API - TLSRoute [ ]
  • Gateway API - TCPRoute [ ]
  • Gateway API - UDPRoute [ ]
  • Gateway API - PolicyReference [ ]
  • Ingress [ ]
  • Egress [ ]
  • MultiCluster [ ]
  • PIPY Control Plane [ ]
  • PIPY Script/Config [ ]
  • CLI Tool [ ]
  • Metrics [ ]
  • Certificate Management [ ]
  • Sidecar Injection [ ]
  • Logging [ ]
  • Debugging [ ]
  • Tests [ ]
  • Demo [ ]
  • CI System [ ]
  • Project Release [ ]

Possible use cases

build: bump pipy to 0.90.0-18

Please describe the Improvement and/or Feature Request

Scope (please mark with X where applicable)

  • New Functionality [ ]
  • Install [ ]
  • Gateway API - GatewayClass [ ]
  • Gateway API - Gateway [ ]
  • Gateway API - HTTPRoute [ ]
  • Gateway API - TLSRoute [ ]
  • Gateway API - TCPRoute [ ]
  • Gateway API - UDPRoute [ ]
  • Gateway API - PolicyReference [ ]
  • Ingress [ ]
  • Egress [ ]
  • MultiCluster [ ]
  • PIPY Control Plane [ ]
  • PIPY Script/Config [ ]
  • CLI Tool [ ]
  • Metrics [ ]
  • Certificate Management [ ]
  • Sidecar Injection [ ]
  • Logging [ ]
  • Debugging [ ]
  • Tests [ ]
  • Demo [ ]
  • CI System [x]
  • Project Release [x]

Possible use cases

feat: Kubernetes Gateway API

Please describe the Improvement and/or Feature Request

Scope (please mark with X where applicable)

  • New Functionality [x]
  • Install [ ]
  • Gateway API - GatewayClass [x]
  • Gateway API - Gateway [x]
  • Gateway API - HTTPRoute [x]
  • Gateway API - TLSRoute [ ]
  • Gateway API - TCPRoute [ ]
  • Gateway API - UDPRoute [ ]
  • Gateway API - PolicyReference [ ]
  • Ingress [ ]
  • Egress [ ]
  • MultiCluster [ ]
  • PIPY Control Plane [ ]
  • PIPY Script/Config [ ]
  • CLI Tool [ ]
  • Metrics [ ]
  • Certificate Management [ ]
  • Sidecar Injection [ ]
  • Logging [ ]
  • Debugging [ ]
  • Tests [ ]
  • Demo [ ]
  • CI System [ ]
  • Project Release [ ]

Possible use cases

what's the difference on CRDs between Erie Canal and MCS API?

Please describe what should be documented
It's described that Erie Canal is an implementation of MCS API, but it uses CRDs from a different group.

Could you figure out their difference and where it comes from?
Please suggest where in the repo the document should be located

feat: MCS Bridge - Integrating eBPF based controller (Proposal)

Please describe the Improvement and/or Feature Request

Proposal is made to make use of eBPF for cross cluster communication, in the environment (OS Kernel) where it is available.

MCS Bridge Controller Startup Process

  1. Read ServiceImport resources and initialize metadata of multi-cluster service using eBPF maps.
  2. Load and mount eBPF programs for MCS Bridge.
  3. Start a proxy service for accessing cross-cluster services:
    • Supports forwarding of Endpoints across multiple clusters and local clusters.
    • Supports various policy modes such as load balancing, failover, etc.

MCS Bridge - Working Principle

DNS Interception

MCS Bridge intercepts DNS requests and forwards them to MCS Bridge Controller. MCS Bridge Controller completes the domain name resolution for cross-cluster services by reading the eBPF map to determine if the service to be resolved is a multi-cluster service. If it is a multi-cluster service, the resolution is returned directly. Otherwise, the request is sent to the upstream domain name service to complete the domain name resolution.

Business Request Interception

When an application accesses a service and establishes a connection, MCS Bridge reads the eBPF map to determine if the target service of the request is a cross-cluster service:

  • If it is not a multi-cluster service, no action is taken.
  • If it is a multi-cluster service, the request is forwarded to MCS Bridge Controller.
  • MCS Bridge Controller completes the policy scheduling for accessing multi-cluster services.

Architecture

mcs bridge

  • MCS Bridge operates only in the Outbound direction of the container that initiates the request.
  • MCS Bridge operates only for requests whose target service is a cross-cluster service.
  • MCS Bridge completes L4 data forwarding.
  • MCS Bridge Controller completes complex request scheduling based on L7 policies.

Scope (please mark with X where applicable)

  • New Functionality [X]
  • Install [ ]
  • Gateway API - GatewayClass [ ]
  • Gateway API - Gateway [ ]
  • Gateway API - HTTPRoute [ ]
  • Gateway API - TLSRoute [ ]
  • Gateway API - TCPRoute [ ]
  • Gateway API - UDPRoute [ ]
  • Gateway API - PolicyReference [ ]
  • Ingress [ ]
  • Egress [ ]
  • MultiCluster [X ]
  • PIPY Control Plane [ ]
  • PIPY Script/Config [ ]
  • CLI Tool [ ]
  • Metrics [ ]
  • Certificate Management [ ]
  • Sidecar Injection [ ]
  • Logging [ ]
  • Debugging [ ]
  • Tests [ ]
  • Demo [ ]
  • CI System [ ]
  • Project Release [ ]

Possible use cases

Clusters running OS Kernel with proper eBPF support.

feat: Enhance NamespacedIngress

Please describe the Improvement and/or Feature Request

Scope (please mark with X where applicable)

  • New Functionality [ ]
  • Install [ ]
  • Gateway API - GatewayClass [ ]
  • Gateway API - Gateway [ ]
  • Gateway API - HTTPRoute [ ]
  • Gateway API - TLSRoute [ ]
  • Gateway API - TCPRoute [ ]
  • Gateway API - UDPRoute [ ]
  • Gateway API - PolicyReference [ ]
  • Ingress [ ]
  • Egress [ ]
  • MultiCluster [ ]
  • PIPY Control Plane [ ]
  • PIPY Script/Config [ ]
  • CLI Tool [ ]
  • Metrics [ ]
  • Certificate Management [ ]
  • Sidecar Injection [ ]
  • Logging [ ]
  • Debugging [ ]
  • Tests [ ]
  • Demo [ ]
  • CI System [ ]
  • Project Release [ ]

Possible use cases

feat: pod hardening

Please describe the Improvement and/or Feature Request

Scope (please mark with X where applicable)

  • New Functionality [x]
  • Install [ ]
  • Gateway API - GatewayClass [ ]
  • Gateway API - Gateway [ ]
  • Gateway API - HTTPRoute [ ]
  • Gateway API - TLSRoute [ ]
  • Gateway API - TCPRoute [ ]
  • Gateway API - UDPRoute [ ]
  • Gateway API - PolicyReference [ ]
  • Ingress [ ]
  • Egress [ ]
  • MultiCluster [ ]
  • PIPY Control Plane [ ]
  • PIPY Script/Config [ ]
  • CLI Tool [ ]
  • Metrics [ ]
  • Certificate Management [ ]
  • Sidecar Injection [ ]
  • Logging [ ]
  • Debugging [ ]
  • Tests [ ]
  • Demo [ ]
  • CI System [ ]
  • Project Release [ ]

Possible use cases

feat: implement session sticky for ingress

Please describe the Improvement and/or Feature Request

Scope (please mark with X where applicable)

  • New Functionality [ ]
  • Install [ ]
  • Gateway API - GatewayClass [ ]
  • Gateway API - Gateway [ ]
  • Gateway API - HTTPRoute [ ]
  • Gateway API - TLSRoute [ ]
  • Gateway API - TCPRoute [ ]
  • Gateway API - UDPRoute [ ]
  • Gateway API - PolicyReference [ ]
  • Ingress [x]
  • Egress [ ]
  • MultiCluster [ ]
  • PIPY Control Plane [ ]
  • PIPY Script/Config [ ]
  • CLI Tool [ ]
  • Metrics [ ]
  • Certificate Management [ ]
  • Sidecar Injection [ ]
  • Logging [ ]
  • Debugging [ ]
  • Tests [ ]
  • Demo [ ]
  • CI System [ ]
  • Project Release [ ]

Possible use cases

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.