diff --git a/404.html b/404.html index f0acdc8..bc54823 100644 --- a/404.html +++ b/404.html @@ -16,7 +16,7 @@ - + @@ -24,7 +24,7 @@
Skip to main content

Page Not Found

We could not find what you were looking for.

Please contact the owner of the site that linked you to the original URL and let them know their link is broken.

- + \ No newline at end of file diff --git a/about/index.html b/about/index.html index 6c4fbb9..6edca7b 100644 --- a/about/index.html +++ b/about/index.html @@ -16,7 +16,7 @@ - + @@ -30,7 +30,7 @@ Michael Schilonka Follow me on
LinkedIn

and Robert Stein

Sponsors

This project is sponsored by Blueshoe GmbH.

- + \ No newline at end of file diff --git a/assets/js/2f539f71.0b7ed128.js b/assets/js/2f539f71.0b7ed128.js deleted file mode 100644 index 7f0e65b..0000000 --- a/assets/js/2f539f71.0b7ed128.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkgefyra=self.webpackChunkgefyra||[]).push([[4747],{3905:(e,n,t)=>{t.d(n,{Zo:()=>u,kt:()=>f});var r=t(7294);function o(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function i(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}function a(e){for(var n=1;n=0||(o[t]=e[t]);return o}(e,n);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(o[t]=e[t])}return o}var s=r.createContext({}),l=function(e){var n=r.useContext(s),t=n;return e&&(t="function"==typeof e?e(n):a(a({},n),e)),t},u=function(e){var n=l(e.components);return r.createElement(s.Provider,{value:n},e.children)},d="mdxType",p={inlineCode:"code",wrapper:function(e){var n=e.children;return r.createElement(r.Fragment,{},n)}},m=r.forwardRef((function(e,n){var t=e.components,o=e.mdxType,i=e.originalType,s=e.parentName,u=c(e,["components","mdxType","originalType","parentName"]),d=l(t),m=o,f=d["".concat(s,".").concat(m)]||d[m]||p[m]||i;return t?r.createElement(f,a(a({ref:n},u),{},{components:t})):r.createElement(f,a({ref:n},u))}));function f(e,n){var t=arguments,o=n&&n.mdxType;if("string"==typeof e||o){var i=t.length,a=new Array(i);a[0]=m;var c={};for(var s in n)hasOwnProperty.call(n,s)&&(c[s]=n[s]);c.originalType=e,c[d]="string"==typeof e?e:o,a[1]=c;for(var l=2;l{t.r(n),t.d(n,{assets:()=>s,contentTitle:()=>a,default:()=>p,frontMatter:()=>i,metadata:()=>c,toc:()=>l});var r=t(7462),o=(t(7294),t(3905));const i={title:"Connecting to Gefyra",sidebar_position:3},a="Connecting to Gefyra",c={unversionedId:"shared-environments/connecting",id:"version-2.0.0/shared-environments/connecting",title:"Connecting to Gefyra",description:"If you have a Gefyra client file and want to connect to a shared Kubernetes cluster,",source:"@site/versioned_docs/version-2.0.0/shared-environments/connecting.md",sourceDirName:"shared-environments",slug:"/shared-environments/connecting",permalink:"/docs/shared-environments/connecting",draft:!1,editUrl:"https://github.com/facebook/docusaurus/tree/main/packages/create-docusaurus/templates/shared/versioned_docs/version-2.0.0/shared-environments/connecting.md",tags:[],version:"2.0.0",sidebarPosition:3,frontMatter:{title:"Connecting to Gefyra",sidebar_position:3},sidebar:"docsSidebar",previous:{title:"Managing Gefyra Clients",permalink:"/docs/shared-environments/clients"},next:{title:"Setting Up Shared Kubernetes Clusters",permalink:"/docs/shared-environments/remote-k8s/"}},s={},l=[{value:"Managing Connections",id:"managing-connections",level:2},{value:"Connect",id:"connect",level:3},{value:"Disconnect",id:"disconnect",level:3},{value:"Connection Names",id:"connection-names",level:3},{value:"Simultaneous Connections",id:"simultaneous-connections",level:2}],u={toc:l},d="wrapper";function p(e){let{components:n,...t}=e;return(0,o.kt)(d,(0,r.Z)({},u,t,{components:n,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"connecting-to-gefyra"},"Connecting to Gefyra"),(0,o.kt)("admonition",{type:"note"},(0,o.kt)("mdxAdmonitionTitle",{parentName:"admonition"},(0,o.kt)("strong",{parentName:"mdxAdmonitionTitle"},"TLDR;")),(0,o.kt)("p",{parentName:"admonition"},"If you have a Gefyra ",(0,o.kt)("em",{parentName:"p"},"client file")," and want to connect to a shared Kubernetes cluster,",(0,o.kt)("br",{parentName:"p"}),"\n","just run ",(0,o.kt)("inlineCode",{parentName:"p"},"gefyra connections connect -f "),".")),(0,o.kt)("h2",{id:"managing-connections"},"Managing Connections"),(0,o.kt)("h3",{id:"connect"},"Connect"),(0,o.kt)("h3",{id:"disconnect"},"Disconnect"),(0,o.kt)("h3",{id:"connection-names"},"Connection Names"),(0,o.kt)("h2",{id:"simultaneous-connections"},"Simultaneous Connections"))}p.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/2f539f71.c7df4220.js b/assets/js/2f539f71.c7df4220.js new file mode 100644 index 0000000..39a673c --- /dev/null +++ b/assets/js/2f539f71.c7df4220.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkgefyra=self.webpackChunkgefyra||[]).push([[4747],{3905:(e,n,t)=>{t.d(n,{Zo:()=>p,kt:()=>f});var o=t(7294);function a(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function i(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);n&&(o=o.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,o)}return t}function r(e){for(var n=1;n=0||(a[t]=e[t]);return a}(e,n);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(o=0;o=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(a[t]=e[t])}return a}var s=o.createContext({}),l=function(e){var n=o.useContext(s),t=n;return e&&(t="function"==typeof e?e(n):r(r({},n),e)),t},p=function(e){var n=l(e.components);return o.createElement(s.Provider,{value:n},e.children)},u="mdxType",m={inlineCode:"code",wrapper:function(e){var n=e.children;return o.createElement(o.Fragment,{},n)}},d=o.forwardRef((function(e,n){var t=e.components,a=e.mdxType,i=e.originalType,s=e.parentName,p=c(e,["components","mdxType","originalType","parentName"]),u=l(t),d=a,f=u["".concat(s,".").concat(d)]||u[d]||m[d]||i;return t?o.createElement(f,r(r({ref:n},p),{},{components:t})):o.createElement(f,r({ref:n},p))}));function f(e,n){var t=arguments,a=n&&n.mdxType;if("string"==typeof e||a){var i=t.length,r=new Array(i);r[0]=d;var c={};for(var s in n)hasOwnProperty.call(n,s)&&(c[s]=n[s]);c.originalType=e,c[u]="string"==typeof e?e:a,r[1]=c;for(var l=2;l{t.r(n),t.d(n,{assets:()=>s,contentTitle:()=>r,default:()=>m,frontMatter:()=>i,metadata:()=>c,toc:()=>l});var o=t(7462),a=(t(7294),t(3905));const i={title:"Connecting to Gefyra",sidebar_position:3},r="Connecting to Gefyra",c={unversionedId:"shared-environments/connecting",id:"version-2.0.0/shared-environments/connecting",title:"Connecting to Gefyra",description:"If you have a Gefyra client file and want to connect to a shared Kubernetes cluster,",source:"@site/versioned_docs/version-2.0.0/shared-environments/connecting.md",sourceDirName:"shared-environments",slug:"/shared-environments/connecting",permalink:"/docs/shared-environments/connecting",draft:!1,editUrl:"https://github.com/facebook/docusaurus/tree/main/packages/create-docusaurus/templates/shared/versioned_docs/version-2.0.0/shared-environments/connecting.md",tags:[],version:"2.0.0",sidebarPosition:3,frontMatter:{title:"Connecting to Gefyra",sidebar_position:3},sidebar:"docsSidebar",previous:{title:"Managing Gefyra Clients",permalink:"/docs/shared-environments/clients"},next:{title:"Setting Up Shared Kubernetes Clusters",permalink:"/docs/shared-environments/remote-k8s/"}},s={},l=[{value:"Managing Connections",id:"managing-connections",level:2},{value:"Connect",id:"connect",level:3},{value:"Listing Connections",id:"listing-connections",level:3},{value:"Disconnect",id:"disconnect",level:3},{value:"Connection Names",id:"connection-names",level:3},{value:"Simultaneous Connections",id:"simultaneous-connections",level:2}],p={toc:l},u="wrapper";function m(e){let{components:n,...t}=e;return(0,a.kt)(u,(0,o.Z)({},p,t,{components:n,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"connecting-to-gefyra"},"Connecting to Gefyra"),(0,a.kt)("admonition",{type:"note"},(0,a.kt)("mdxAdmonitionTitle",{parentName:"admonition"},(0,a.kt)("strong",{parentName:"mdxAdmonitionTitle"},"TLDR;")),(0,a.kt)("p",{parentName:"admonition"},"If you have a Gefyra ",(0,a.kt)("em",{parentName:"p"},"client file")," and want to connect to a shared Kubernetes cluster,",(0,a.kt)("br",{parentName:"p"}),"\n","just run ",(0,a.kt)("inlineCode",{parentName:"p"},"gefyra connections connect -f "),".")),(0,a.kt)("p",null,"Connecting to a Gefyra-enabled Kubernetes cluster is the process of any Gefyra client to establish a networking connection based on ",(0,a.kt)("a",{parentName:"p",href:"https://www.wireguard.com/"},"Wireguard VPN")," to a cluster. It is a multistep process that involves the dynamic creation of connection credentials and IP-range negotiation\nbetween cluster and client. The network connection is persistent for the session, rock-solid and blazingly fast."),(0,a.kt)("admonition",{title:"Prerequisites",type:"note"},(0,a.kt)("ol",{parentName:"admonition"},(0,a.kt)("li",{parentName:"ol"},"Gefyra is ",(0,a.kt)("a",{parentName:"li",href:"https://gefyra.dev/installation"},"available")," (at least in version 2.0.0)"),(0,a.kt)("li",{parentName:"ol"},"A running Docker host on the machine that connects "),(0,a.kt)("li",{parentName:"ol"},"A Gefyra ",(0,a.kt)("a",{parentName:"li",href:"/docs/shared-environments/clients#a-default-client-file"},(0,a.kt)("em",{parentName:"a"},"client file"))))),(0,a.kt)("h2",{id:"managing-connections"},"Managing Connections"),(0,a.kt)("p",null,"Client connections to a Gefyra cluster are managed with the ",(0,a.kt)("inlineCode",{parentName:"p"},"gefyra connections")," command group.",(0,a.kt)("br",{parentName:"p"}),"\n","The connection itself consists of a file, that is located in a local user directory, and ",(0,a.kt)("em",{parentName:"p"},"usually")," a\nDocker container that acts as a VPN endpoint on a local machine."),(0,a.kt)("h3",{id:"connect"},"Connect"),(0,a.kt)("admonition",{title:"Gefyra client file required",type:"important"},(0,a.kt)("p",{parentName:"admonition"},"You can only connect to a Gefyra cluster with a ",(0,a.kt)("a",{parentName:"p",href:"/docs/shared-environments/clients#distributing-the-client-file"},(0,a.kt)("em",{parentName:"a"},"client file")),".\nIf you don't have such a client file, either ",(0,a.kt)("a",{parentName:"p",href:"/docs/shared-environments/installation"},"set up Gefyra in a Kubernetes cluster")," and create yourself\n",(0,a.kt)("a",{parentName:"p",href:"/docs/shared-environments/clients#creating-a-gefyra-client"},"a Gefyra ",(0,a.kt)("em",{parentName:"a"},"client")),", or find the responsible person and ask for access.")),(0,a.kt)("p",null,"Establishing a connection (",(0,a.kt)("strong",{parentName:"p"},"for the first time"),") to Gefyra works like this:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre"},"> gefyra connections connect -f myfancyclient.json\n\nCreating the cluster connection 'default' | \u25b6\u25b6\u25b6\u25b6\u25b6\u25b6\u25b6 | / 0 in 28s\n\nConnection established with connection name 'default'. Run 'gefyra connections list' to see all connections.\n")),(0,a.kt)("p",null,"This example assumes, there is a client that provides the client file ",(0,a.kt)("em",{parentName:"p"},"myfancyclient.json"),". A couple of things happened during this process:"),(0,a.kt)("ol",null,(0,a.kt)("li",{parentName:"ol"},"Gefyra fetched the ad-hoc VPN credentials for this connection"),(0,a.kt)("li",{parentName:"ol"},"A container for the Gefyra connection with name ",(0,a.kt)("em",{parentName:"li"},"default")," has been started"),(0,a.kt)("li",{parentName:"ol"},"A dedicated Docker network has been created"),(0,a.kt)("li",{parentName:"ol"},"The connection was successfully checked")),(0,a.kt)("p",null,"If you check your Docker host, you will find a container named ",(0,a.kt)("inlineCode",{parentName:"p"},"gefyra-cargo-default")," running. That's the gateway into the cluster."),(0,a.kt)("admonition",{title:"Default connection",type:"note"},(0,a.kt)("p",{parentName:"admonition"},"Since we didn't specify a ",(0,a.kt)("em",{parentName:"p"},"connection name")," and there was no ",(0,a.kt)("em",{parentName:"p"},"default")," connection available before, creating it was successful. However, there\nis only one ",(0,a.kt)("em",{parentName:"p"},"default")," connection on a client machine. Additional connections must ",(0,a.kt)("a",{parentName:"p",href:"#connection-names"},"be assigned a name"),".")),(0,a.kt)("p",null,"Once you have a stopped connection, you don't need the client file anymore to connect. Just run the following with the ",(0,a.kt)("em",{parentName:"p"},"default")," connection:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre"},"> gefyra connections connect\n")),(0,a.kt)("p",null,"The Gefyra connection will be back up in no time. Of course, if you do have multiple connections, you have to specify the connection name with the\n",(0,a.kt)("inlineCode",{parentName:"p"},"--connection-name")," option."),(0,a.kt)("admonition",{title:"Client file superseded",type:"note"},(0,a.kt)("p",{parentName:"admonition"},"After you successfully connected a machine with a Gefyra cluster, the ",(0,a.kt)("em",{parentName:"p"},"client file")," is typically superseded at that point. Gefyra stores the\ncredentials from the file elsewhere, so a user doesn't have to handle the file. However, if you remove your connection and want to reconnect\nto the cluster (assuming the Gefyra client is still the same) you may connect to the cluster with that file again. Yet, you can also request a\nnew one, which is safer than having a ",(0,a.kt)("em",{parentName:"p"},"client file")," dangling.")),(0,a.kt)("h3",{id:"listing-connections"},"Listing Connections"),(0,a.kt)("p",null,"To see all Gefyra connections on a local machine, please run the following:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre"},"> gefyra connections list\nNAME VERSION CREATED STATUS\ndefault 2.0.0 2023-10-10T18:36:15.519969679Z running\n")),(0,a.kt)("p",null,"You will find the status of all of your connections here. It can be ",(0,a.kt)("inlineCode",{parentName:"p"},"running"),", ",(0,a.kt)("inlineCode",{parentName:"p"},"stopped")," or ",(0,a.kt)("inlineCode",{parentName:"p"},"error"),"."),(0,a.kt)("h3",{id:"disconnect"},"Disconnect"),(0,a.kt)("p",null,"To actively disconnect from the cluster, you run this command:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre"},"gefyra connections stop\n")),(0,a.kt)("p",null,"This assumes you have a ",(0,a.kt)("em",{parentName:"p"},"default")," connection currently running. If not, you have to provide a valid connection name with the ",(0,a.kt)("inlineCode",{parentName:"p"},"--connection-name")," option."),(0,a.kt)("p",null,"You will find this connection to be stopped from the client's side. However, if you want to reconnect to the cluster, you can now run ",(0,a.kt)("inlineCode",{parentName:"p"},"gefyra connections connect")," again. The connection process will be superfast this time."),(0,a.kt)("admonition",{title:"Deleting a connection",type:"important"},(0,a.kt)("p",{parentName:"admonition"},"If you want to delete a connection, and thus release the Gefyra client in the cluster, you can run ",(0,a.kt)("inlineCode",{parentName:"p"},"gefyra connections remove"),". If you want to reconnect\nlater, you will need a ",(0,a.kt)("em",{parentName:"p"},"client file")," again.")),(0,a.kt)("h3",{id:"connection-names"},"Connection Names"),(0,a.kt)("h2",{id:"simultaneous-connections"},"Simultaneous Connections"))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/a16b1d7d.7321bb72.js b/assets/js/a16b1d7d.7321bb72.js new file mode 100644 index 0000000..c29cf97 --- /dev/null +++ b/assets/js/a16b1d7d.7321bb72.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkgefyra=self.webpackChunkgefyra||[]).push([[5267],{3905:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>y});var a=n(7294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function i(e){for(var t=1;t=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var l=a.createContext({}),p=function(e){var t=a.useContext(l),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},c=function(e){var t=p(e.components);return a.createElement(l.Provider,{value:t},e.children)},u="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},f=a.forwardRef((function(e,t){var n=e.components,r=e.mdxType,o=e.originalType,l=e.parentName,c=s(e,["components","mdxType","originalType","parentName"]),u=p(n),f=r,y=u["".concat(l,".").concat(f)]||u[f]||d[f]||o;return n?a.createElement(y,i(i({ref:t},c),{},{components:n})):a.createElement(y,i({ref:t},c))}));function y(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var o=n.length,i=new Array(o);i[0]=f;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s[u]="string"==typeof e?e:r,i[1]=s;for(var p=2;p{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>i,default:()=>d,frontMatter:()=>o,metadata:()=>s,toc:()=>p});var a=n(7462),r=(n(7294),n(3905));const o={title:"Installing Gefyra in a Cluster",sidebar_position:1},i="Gefyra (Remote) Cluster Installation",s={unversionedId:"shared-environments/installation",id:"version-2.0.0/shared-environments/installation",title:"Installing Gefyra in a Cluster",description:"Installing Gefyra to a remote cluster is usually slightly different to a local setup. This is because the networking aspect",source:"@site/versioned_docs/version-2.0.0/shared-environments/installation.md",sourceDirName:"shared-environments",slug:"/shared-environments/installation",permalink:"/docs/shared-environments/installation",draft:!1,editUrl:"https://github.com/facebook/docusaurus/tree/main/packages/create-docusaurus/templates/shared/versioned_docs/version-2.0.0/shared-environments/installation.md",tags:[],version:"2.0.0",sidebarPosition:1,frontMatter:{title:"Installing Gefyra in a Cluster",sidebar_position:1},sidebar:"docsSidebar",previous:{title:"Setting up a Shared Kubernetes Cluster",permalink:"/docs/shared-environments/"},next:{title:"Managing Gefyra Clients",permalink:"/docs/shared-environments/clients"}},l={},p=[{value:"The Installation",id:"the-installation",level:2},{value:"Default Networking",id:"default-networking",level:2},{value:"Setting up a UDP Loadbalancer",id:"setting-up-a-udp-loadbalancer",level:2},{value:"Presets",id:"presets",level:2}],c={toc:p},u="wrapper";function d(e){let{components:t,...n}=e;return(0,r.kt)(u,(0,a.Z)({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"gefyra-remote-cluster-installation"},"Gefyra (Remote) Cluster Installation"),(0,r.kt)("p",null,"Installing Gefyra to a remote cluster is usually slightly different to a local setup. This is because the networking aspect\ndiffers considerably between a local cluster, that might be created with overlay networks and port-forwarding, and remote clusters with cloud-specific routing components. Starting with Gefyra 2, you get good control of the cluster-side components. "),(0,r.kt)("admonition",{title:"Prerequisites",type:"note"},(0,r.kt)("p",{parentName:"admonition"},"Gefyra is ",(0,r.kt)("a",{parentName:"p",href:"https://gefyra.dev/installation"},"available")," (at least in version 2.0.0)")),(0,r.kt)("h2",{id:"the-installation"},"The Installation"),(0,r.kt)("p",null,"There are a couple of options for the installation procedure. Gefyra's executable ships with all required Kubernetes configs\nfor that specific version."),(0,r.kt)("p",null,"To introspect what is going to be installed into your cluster, just run ",(0,r.kt)("inlineCode",{parentName:"p"},"gefyra install"),". This command generates a list of\nKubernetes objects that can either be stored for manual modification, or directly applied to the cluster."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml"},"> gefyra install\n\napiVersion: v1\nkind: Namespace\nmetadata:\n name: gefyra\n\n---\napiVersion: v1\nkind: ServiceAccount\nmetadata:\n name: gefyra-operator\n namespace: gefyra\n\n---\napiVersion: rbac.authorization.k8s.io/v1\nkind: ClusterRole\n[...]\n")),(0,r.kt)("p",null,"Please check out the ",(0,r.kt)("a",{parentName:"p",href:"/docs/cli#install"},"CLI reference for that command"),". "),(0,r.kt)("p",null,"If the default configuration is suitable for your environment, directly apply it with:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"gefyra install | kubectl apply -f -\n")),(0,r.kt)("p",null,"That will pipe the Kubernetes configs generated by Gefyra's install command directly into the cluster context\nthat is currently active."),(0,r.kt)("admonition",{title:"Kubernetes context",type:"note"},(0,r.kt)("p",{parentName:"admonition"},"Check your active cluster context with ",(0,r.kt)("inlineCode",{parentName:"p"},"kubectl config current-context"),".")),(0,r.kt)("h2",{id:"default-networking"},"Default Networking"),(0,r.kt)("p",null,"Gefyra depends on a working ",(0,r.kt)("a",{parentName:"p",href:"https://www.wireguard.com/"},"Wireguard VPN")," connection between the cluster and Gefyra's clients. Setting up that connection is completely managed by Gefyra and only requires little configuration from a cluster admin: that is configuring the VPN route."),(0,r.kt)("admonition",{title:"NodePort default",type:"important"},(0,r.kt)("p",{parentName:"admonition"},"Gefyra's default to expose its Wireguard endpoint is via a Kubernetes service of type ",(0,r.kt)("strong",{parentName:"p"},"NodePort"),". However, this can only work if the Kubernetes nodes have a public (internet-routable) IP address, or at least this IP is reachable for all clients.")),(0,r.kt)("p",null,"You can check out the Kubernetes service object in the output of ",(0,r.kt)("inlineCode",{parentName:"p"},"gefyra install"),"."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml"},'> gefyra install | grep "type:" -B21\n\napiVersion: v1\nkind: Service\nmetadata:\n annotations: {}\n labels:\n gefyra.dev/app: stowaway\n gefyra.dev/provider: stowaway\n gefyra.dev/role: connection\n name: gefyra-stowaway-wireguard\n namespace: gefyra\nspec:\n ports:\n - name: gefyra-wireguard\n nodePort: 31820\n port: 51820\n protocol: UDP\n targetPort: 51820\n selector:\n gefyra.dev/app: stowaway\n gefyra.dev/provider: stowaway\n gefyra.dev/role: connection\n type: NodePort\n')),(0,r.kt)("p",null,"This service will open up the port ",(0,r.kt)("strong",{parentName:"p"},"31820")," on all of your Kubernetes nodes and route VPN traffic to Gefyra."),(0,r.kt)("p",null,"If you don't want to expose Gefyra via a ",(0,r.kt)("em",{parentName:"p"},"NodePort")," service, or you don't have routable IPs on your Kubernetes nodes, you need\nto set up a ",(0,r.kt)("strong",{parentName:"p"},"UDP load balancing")," for Gefyra. Luckily, Gefyra's got you covered."),(0,r.kt)("h2",{id:"setting-up-a-udp-loadbalancer"},"Setting up a UDP ",(0,r.kt)("inlineCode",{parentName:"h2"},"Loadbalancer")),(0,r.kt)("admonition",{title:"UDP load balancing",type:"important"},(0,r.kt)("p",{parentName:"admonition"},"Gefyra's VPN connection is established using UDP traffic. Not all cloud providers offer a UDP load balancing solution. If you can not use a ",(0,r.kt)("em",{parentName:"p"},"Loadbalancer"),", you have to stick with the ",(0,r.kt)("em",{parentName:"p"},"NodePort")," service.")),(0,r.kt)("p",null,"To switch the load balancer service for the installation, just set the appropriate option flag for the ",(0,r.kt)("inlineCode",{parentName:"p"},"gefyra install")," command:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"> gefyra install --service-type=Loadbalancer\n")),(0,r.kt)("p",null,"In many cases, the external infrastructure for a Kubernetes cluster is managed via service annotations. With Gefyra you can\nset custom annotations easily using the ",(0,r.kt)("inlineCode",{parentName:"p"},"--service-annotations")," as often as you need. "),(0,r.kt)("p",null,"For example:",(0,r.kt)("br",{parentName:"p"}),"\n",(0,r.kt)("inlineCode",{parentName:"p"},"gefyra install --service-type=Loadbalancer --service-annotations service.beta.kubernetes.io/aws-load-balancer-nlb-target-type=ip --service-annotations ervice.beta.kubernetes.io/aws-load-balancer-scheme=internet-facing"),"\nwill create the following service in your cluster:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml"},"apiVersion: v1\nkind: Service\nmetadata:\n annotations:\n # see these annotations\n service.beta.kubernetes.io/aws-load-balancer-nlb-target-type: ip\n service.beta.kubernetes.io/aws-load-balancer-scheme: internet-facing\n labels:\n gefyra.dev/app: stowaway\n gefyra.dev/provider: stowaway\n gefyra.dev/role: connection\n name: gefyra-stowaway-wireguard\n namespace: gefyra\nspec:\n ports:\n - name: gefyra-wireguard\n port: 31820\n protocol: UDP\n targetPort: 51820\n selector:\n gefyra.dev/app: stowaway\n gefyra.dev/provider: stowaway\n gefyra.dev/role: connection\n type: LoadBalancer\n")),(0,r.kt)("p",null,"Please be aware that Gefyra comes with a few manually crafted presets for popular Kubernetes offering. Check out the next section to learn how you install Gefyra using an available installation preset."),(0,r.kt)("h2",{id:"presets"},"Presets"),(0,r.kt)("p",null,"To make it as convenient as possible, Gefyra offers presets for widely used Kubernetes offerings, such as Google's GKE or\nAmazon EKS."),(0,r.kt)("p",null,"Please check available presets with: "),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"> gefyra install --help | grep preset\n\n --preset TEXT Set configs from a preset (available: aws,gke)\n")),(0,r.kt)("p",null,"Currently, it's only ",(0,r.kt)("em",{parentName:"p"},"aws")," and ",(0,r.kt)("em",{parentName:"p"},"gke"),". If you want to add another preset for another popular Kubernetes provider, please consider ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/gefyrahq/gefyra/issues/new?assignees=&labels=enhancement&projects=&template=feature-request.yaml"},"opening a ticket on GitHub")," for it."),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Example:")," If you install Gefyra to an EKS cluster, you only have to set the preset\n",(0,r.kt)("inlineCode",{parentName:"p"},"gefyra install --preset aws | kubectl apply -f -"),", and it will automatically create the ",(0,r.kt)("em",{parentName:"p"},"Network Load Balancer")," via the required annotations on the Kubernetes service:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml"},"apiVersion: v1\nkind: Service\nmetadata:\n annotations:\n # see these annotations\n service.beta.kubernetes.io/aws-load-balancer-nlb-target-type: ip\n service.beta.kubernetes.io/aws-load-balancer-scheme: internet-facing\n service.beta.kubernetes.io/aws-load-balancer-type: nlb\n labels:\n gefyra.dev/app: stowaway\n gefyra.dev/provider: stowaway\n gefyra.dev/role: connection\n name: gefyra-stowaway-wireguard\n namespace: gefyra\nspec:\n ports:\n - name: gefyra-wireguard\n port: 31820\n protocol: UDP\n targetPort: 51820\n selector:\n gefyra.dev/app: stowaway\n gefyra.dev/provider: stowaway\n gefyra.dev/role: connection\n type: LoadBalancer\n")))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/a16b1d7d.7cfd8542.js b/assets/js/a16b1d7d.7cfd8542.js deleted file mode 100644 index 3a8b3d3..0000000 --- a/assets/js/a16b1d7d.7cfd8542.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkgefyra=self.webpackChunkgefyra||[]).push([[5267],{3905:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>y});var a=n(7294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function s(e){for(var t=1;t=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var l=a.createContext({}),p=function(e){var t=a.useContext(l),n=t;return e&&(n="function"==typeof e?e(t):s(s({},t),e)),n},c=function(e){var t=p(e.components);return a.createElement(l.Provider,{value:t},e.children)},u="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},f=a.forwardRef((function(e,t){var n=e.components,r=e.mdxType,o=e.originalType,l=e.parentName,c=i(e,["components","mdxType","originalType","parentName"]),u=p(n),f=r,y=u["".concat(l,".").concat(f)]||u[f]||d[f]||o;return n?a.createElement(y,s(s({ref:t},c),{},{components:n})):a.createElement(y,s({ref:t},c))}));function y(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var o=n.length,s=new Array(o);s[0]=f;var i={};for(var l in t)hasOwnProperty.call(t,l)&&(i[l]=t[l]);i.originalType=e,i[u]="string"==typeof e?e:r,s[1]=i;for(var p=2;p{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>s,default:()=>d,frontMatter:()=>o,metadata:()=>i,toc:()=>p});var a=n(7462),r=(n(7294),n(3905));const o={title:"Installing Gefyra in a Cluster",sidebar_position:1},s="Gefyra (Remote) Cluster Installation",i={unversionedId:"shared-environments/installation",id:"version-2.0.0/shared-environments/installation",title:"Installing Gefyra in a Cluster",description:"Installing Gefyra to a remote cluster is usually slightly different to a local setup. This is because the networking aspect",source:"@site/versioned_docs/version-2.0.0/shared-environments/installation.md",sourceDirName:"shared-environments",slug:"/shared-environments/installation",permalink:"/docs/shared-environments/installation",draft:!1,editUrl:"https://github.com/facebook/docusaurus/tree/main/packages/create-docusaurus/templates/shared/versioned_docs/version-2.0.0/shared-environments/installation.md",tags:[],version:"2.0.0",sidebarPosition:1,frontMatter:{title:"Installing Gefyra in a Cluster",sidebar_position:1},sidebar:"docsSidebar",previous:{title:"Setting up a Shared Kubernetes Cluster",permalink:"/docs/shared-environments/"},next:{title:"Managing Gefyra Clients",permalink:"/docs/shared-environments/clients"}},l={},p=[{value:"Prerequisites",id:"prerequisites",level:2},{value:"The Installation",id:"the-installation",level:2},{value:"Default Networking",id:"default-networking",level:2},{value:"Setting up a UDP Loadbalancer",id:"setting-up-a-udp-loadbalancer",level:2},{value:"Presets",id:"presets",level:2}],c={toc:p},u="wrapper";function d(e){let{components:t,...n}=e;return(0,r.kt)(u,(0,a.Z)({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"gefyra-remote-cluster-installation"},"Gefyra (Remote) Cluster Installation"),(0,r.kt)("p",null,"Installing Gefyra to a remote cluster is usually slightly different to a local setup. This is because the networking aspect\ndiffers considerably between a local cluster, that might be created with overlay networks and port-forwarding, and remote clusters with cloud-specific routing components. Starting with Gefyra 2, you get good control of the cluster-side components. "),(0,r.kt)("h2",{id:"prerequisites"},"Prerequisites"),(0,r.kt)("p",null,"Gefyra is ",(0,r.kt)("a",{parentName:"p",href:"https://gefyra.dev/installation"},"available")," (at least in version 2.0.0)"),(0,r.kt)("h2",{id:"the-installation"},"The Installation"),(0,r.kt)("p",null,"There are a couple of options for the installation procedure. Gefyra's executable ships with all required Kubernetes configs\nfor that specific version."),(0,r.kt)("p",null,"To introspect what is going to be installed into your cluster, just run ",(0,r.kt)("inlineCode",{parentName:"p"},"gefyra install"),". This command generates a list of\nKubernetes objects that can either be stored for manual modification, or directly applied to the cluster."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml"},"> gefyra install\n\napiVersion: v1\nkind: Namespace\nmetadata:\n name: gefyra\n\n---\napiVersion: v1\nkind: ServiceAccount\nmetadata:\n name: gefyra-operator\n namespace: gefyra\n\n---\napiVersion: rbac.authorization.k8s.io/v1\nkind: ClusterRole\n[...]\n")),(0,r.kt)("p",null,"Please check out the ",(0,r.kt)("a",{parentName:"p",href:"/docs/cli#install"},"CLI reference for that command"),". "),(0,r.kt)("p",null,"If the default configuration is suitable for your environment, directly apply it with:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"gefyra install | kubectl apply -f -\n")),(0,r.kt)("p",null,"That will pipe the Kubernetes configs generated by Gefyra's install command directly into the cluster context\nthat is currently active.",(0,r.kt)("br",{parentName:"p"}),"\n",(0,r.kt)("strong",{parentName:"p"},"Remark:")," Check you current cluster context with ",(0,r.kt)("inlineCode",{parentName:"p"},"kubectl config current-context")),(0,r.kt)("h2",{id:"default-networking"},"Default Networking"),(0,r.kt)("p",null,"Gefyra depends on a working ",(0,r.kt)("a",{parentName:"p",href:"https://www.wireguard.com/"},"Wireguard VPN")," connection between the cluster and Gefyra's clients. Setting up that connection is completely managed by Gefyra and only requires little configuration from a cluster admin: that is configuring the VPN route."),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Important:")," Gefyra's default to expose its Wireguard endpoint is via a Kubernetes service of type ",(0,r.kt)("strong",{parentName:"p"},"NodePort"),". However, that is only feasible if the Kubernetes nodes have a public (internet-routable) IP address, or at least this IP is reachable for all clients."),(0,r.kt)("p",null,"You can check out the Kubernetes service object in the output of ",(0,r.kt)("inlineCode",{parentName:"p"},"gefyra install"),"."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml"},'> gefyra install | grep "type:" -B21\n\napiVersion: v1\nkind: Service\nmetadata:\n annotations: {}\n labels:\n gefyra.dev/app: stowaway\n gefyra.dev/provider: stowaway\n gefyra.dev/role: connection\n name: gefyra-stowaway-wireguard\n namespace: gefyra\nspec:\n ports:\n - name: gefyra-wireguard\n nodePort: 31820\n port: 51820\n protocol: UDP\n targetPort: 51820\n selector:\n gefyra.dev/app: stowaway\n gefyra.dev/provider: stowaway\n gefyra.dev/role: connection\n type: NodePort\n')),(0,r.kt)("p",null,"This service will open up the port ",(0,r.kt)("strong",{parentName:"p"},"31820")," on all of your Kubernetes nodes and route VPN traffic to Gefyra."),(0,r.kt)("p",null,"If you don't want to expose Gefyra via a ",(0,r.kt)("em",{parentName:"p"},"NodePort")," service, or you don't have routable IPs on your Kubernetes nodes, you need\nto set up a ",(0,r.kt)("strong",{parentName:"p"},"UDP load balancing")," for Gefyra. Luckily, Gefyra's got you covered."),(0,r.kt)("h2",{id:"setting-up-a-udp-loadbalancer"},"Setting up a UDP ",(0,r.kt)("inlineCode",{parentName:"h2"},"Loadbalancer")),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Important:")," Gefyra's VPN connection is established using UDP traffic. Not all cloud providers offer a UDP load balancing solution. If you can not use a ",(0,r.kt)("em",{parentName:"p"},"Loadbalancer"),", you have to stick with the ",(0,r.kt)("em",{parentName:"p"},"NodePort")," service."),(0,r.kt)("p",null,"To switch the load balancer service for the installation, just set the appropriate option flag for the ",(0,r.kt)("inlineCode",{parentName:"p"},"gefyra install")," command:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"> gefyra install --service-type=Loadbalancer\n")),(0,r.kt)("p",null,"In many cases, the external infrastructure for a Kubernetes cluster is managed via service annotations. With Gefyra you can\nset custom annotations easily using the ",(0,r.kt)("inlineCode",{parentName:"p"},"--service-annotations")," as often as you need. "),(0,r.kt)("p",null,"For example:",(0,r.kt)("br",{parentName:"p"}),"\n",(0,r.kt)("inlineCode",{parentName:"p"},"gefyra install --service-type=Loadbalancer --service-annotations service.beta.kubernetes.io/aws-load-balancer-nlb-target-type=ip --service-annotations ervice.beta.kubernetes.io/aws-load-balancer-scheme=internet-facing"),"\nwill create the following service in your cluster:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml"},"apiVersion: v1\nkind: Service\nmetadata:\n annotations:\n # see these annotations\n service.beta.kubernetes.io/aws-load-balancer-nlb-target-type: ip\n service.beta.kubernetes.io/aws-load-balancer-scheme: internet-facing\n labels:\n gefyra.dev/app: stowaway\n gefyra.dev/provider: stowaway\n gefyra.dev/role: connection\n name: gefyra-stowaway-wireguard\n namespace: gefyra\nspec:\n ports:\n - name: gefyra-wireguard\n port: 31820\n protocol: UDP\n targetPort: 51820\n selector:\n gefyra.dev/app: stowaway\n gefyra.dev/provider: stowaway\n gefyra.dev/role: connection\n type: LoadBalancer\n")),(0,r.kt)("p",null,"Please be aware that Gefyra comes with a few manually crafted presets for popular Kubernetes offering. Check out the next section to learn how you install Gefyra using an available installation preset."),(0,r.kt)("h2",{id:"presets"},"Presets"),(0,r.kt)("p",null,"To make it as convenient as possible, Gefyra offers presets for widely used Kubernetes offerings, such as Google's GKE or\nAmazon EKS."),(0,r.kt)("p",null,"Please check available presets with: "),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"> gefyra install --help | grep preset\n\n --preset TEXT Set configs from a preset (available: aws,gke)\n")),(0,r.kt)("p",null,"Currently, it's only ",(0,r.kt)("em",{parentName:"p"},"aws")," and ",(0,r.kt)("em",{parentName:"p"},"gke"),". If you want to add another preset for another popular Kubernetes provider, please consider ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/gefyrahq/gefyra/issues/new?assignees=&labels=enhancement&projects=&template=feature-request.yaml"},"opening a ticket on GitHub")," for it."),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Example:")," If you install Gefyra to an EKS cluster, you only have to set the preset\n",(0,r.kt)("inlineCode",{parentName:"p"},"gefyra install --preset aws | kubectl apply -f -"),", and it will automatically create the ",(0,r.kt)("em",{parentName:"p"},"Network Load Balancer")," via the required annotations on the Kubernetes service:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml"},"apiVersion: v1\nkind: Service\nmetadata:\n annotations:\n # see these annotations\n service.beta.kubernetes.io/aws-load-balancer-nlb-target-type: ip\n service.beta.kubernetes.io/aws-load-balancer-scheme: internet-facing\n service.beta.kubernetes.io/aws-load-balancer-type: nlb\n labels:\n gefyra.dev/app: stowaway\n gefyra.dev/provider: stowaway\n gefyra.dev/role: connection\n name: gefyra-stowaway-wireguard\n namespace: gefyra\nspec:\n ports:\n - name: gefyra-wireguard\n port: 31820\n protocol: UDP\n targetPort: 51820\n selector:\n gefyra.dev/app: stowaway\n gefyra.dev/provider: stowaway\n gefyra.dev/role: connection\n type: LoadBalancer\n")))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/d05c1138.920814ad.js b/assets/js/d05c1138.920814ad.js new file mode 100644 index 0000000..58c992a --- /dev/null +++ b/assets/js/d05c1138.920814ad.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkgefyra=self.webpackChunkgefyra||[]).push([[7831],{3905:(e,t,n)=>{n.d(t,{Zo:()=>d,kt:()=>m});var a=n(7294);function i(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function r(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function l(e){for(var t=1;t=0||(i[n]=e[n]);return i}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(i[n]=e[n])}return i}var c=a.createContext({}),s=function(e){var t=a.useContext(c),n=t;return e&&(n="function"==typeof e?e(t):l(l({},t),e)),n},d=function(e){var t=s(e.components);return a.createElement(c.Provider,{value:t},e.children)},p="mdxType",u={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},f=a.forwardRef((function(e,t){var n=e.components,i=e.mdxType,r=e.originalType,c=e.parentName,d=o(e,["components","mdxType","originalType","parentName"]),p=s(n),f=i,m=p["".concat(c,".").concat(f)]||p[f]||u[f]||r;return n?a.createElement(m,l(l({ref:t},d),{},{components:n})):a.createElement(m,l({ref:t},d))}));function m(e,t){var n=arguments,i=t&&t.mdxType;if("string"==typeof e||i){var r=n.length,l=new Array(r);l[0]=f;var o={};for(var c in t)hasOwnProperty.call(t,c)&&(o[c]=t[c]);o.originalType=e,o[p]="string"==typeof e?e:i,l[1]=o;for(var s=2;s{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>l,default:()=>u,frontMatter:()=>r,metadata:()=>o,toc:()=>s});var a=n(7462),i=(n(7294),n(3905));const r={title:"Managing Gefyra Clients",sidebar_position:2},l="Working With Gefyra Clients",o={unversionedId:"shared-environments/clients",id:"version-2.0.0/shared-environments/clients",title:"Managing Gefyra Clients",description:"Gefyra Clients provide a way to grant multiple clients (i.e. users, robots, pipelines, etc.) limited access to a Kubernetes cluster in order to use Gefyra's capabilities. They are managed with gefyra clients [COMMAND].",source:"@site/versioned_docs/version-2.0.0/shared-environments/clients.md",sourceDirName:"shared-environments",slug:"/shared-environments/clients",permalink:"/docs/shared-environments/clients",draft:!1,editUrl:"https://github.com/facebook/docusaurus/tree/main/packages/create-docusaurus/templates/shared/versioned_docs/version-2.0.0/shared-environments/clients.md",tags:[],version:"2.0.0",sidebarPosition:2,frontMatter:{title:"Managing Gefyra Clients",sidebar_position:2},sidebar:"docsSidebar",previous:{title:"Installing Gefyra in a Cluster",permalink:"/docs/shared-environments/installation"},next:{title:"Connecting to Gefyra",permalink:"/docs/shared-environments/connecting"}},c={},s=[{value:"Shared Cluster Access",id:"shared-cluster-access",level:2},{value:"Creating a Gefyra Client",id:"creating-a-gefyra-client",level:2},{value:"Retrieving a Client File",id:"retrieving-a-client-file",level:2},{value:"A Default Client File",id:"a-default-client-file",level:3},{value:"Providing Custom Connection Data",id:"providing-custom-connection-data",level:3},{value:"Distributing the Client File",id:"distributing-the-client-file",level:3},{value:"Deleting a Gefyra Client",id:"deleting-a-gefyra-client",level:2}],d={toc:s},p="wrapper";function u(e){let{components:t,...n}=e;return(0,i.kt)(p,(0,a.Z)({},d,n,{components:t,mdxType:"MDXLayout"}),(0,i.kt)("h1",{id:"working-with-gefyra-clients"},"Working With Gefyra Clients"),(0,i.kt)("admonition",{type:"note"},(0,i.kt)("mdxAdmonitionTitle",{parentName:"admonition"},(0,i.kt)("strong",{parentName:"mdxAdmonitionTitle"},"TLDR;")),(0,i.kt)("p",{parentName:"admonition"},"Gefyra Clients provide a way to grant multiple clients (i.e. users, robots, pipelines, etc.) limited access to a Kubernetes cluster in order to use Gefyra's capabilities. They are managed with ",(0,i.kt)("a",{parentName:"p",href:"/docs/cli#clients"},(0,i.kt)("inlineCode",{parentName:"a"},"gefyra clients [COMMAND]")),".")),(0,i.kt)("p",null,"Gefyra introduces the concept of ",(0,i.kt)("strong",{parentName:"p"},"Gefyra Clients"),". These are objects to manage and distribute access to the cluster. "),(0,i.kt)("h2",{id:"shared-cluster-access"},"Shared Cluster Access"),(0,i.kt)("p",null,"Each created client object get a dedicated ",(0,i.kt)("em",{parentName:"p"},"Kubernetes Service Account")," attached that is being used by any Gefyra client during its interaction with the cluster. The corresponding ",(0,i.kt)("em",{parentName:"p"},"client file"),", which contains the connection parameters for the ",(0,i.kt)("em",{parentName:"p"},"Service Account")," can be retrieved from the cluster by the administrator with Gefyra's CLI. "),(0,i.kt)("p",null,"This client file can be then distributed to anyone which needs to ",(0,i.kt)("inlineCode",{parentName:"p"},"connect"),", ",(0,i.kt)("inlineCode",{parentName:"p"},"run")," or ",(0,i.kt)("inlineCode",{parentName:"p"},"bridge")," workloads in the given cluster.\nThe permissions of the Kubernetes service account are limited, following the principle of the least privilege. Hence, Gefyra clients can only operate in the cluster with the well-defined set of Gefyra's actions."),(0,i.kt)("p",null,"This flow gives a brief overview of Gefyra's workflow for teams:"),(0,i.kt)("mermaid",{value:'flowchart TD;\n install["DevOps installs Gefyra (gefyra install)"]\n generate["DevOps generates Gefyra client (gefyra clients create)"]\n save["DevOps saves Gefyra client files (gefyra clients config)"]\n distribute["DevOps distributes client file"]\n connect["Developer connects via client file (gefyra connections)"]\n run["Developer runs workload (gefyra run)"]\n install--\x3egenerate\n generate--\x3esave\n save--\x3edistribute\n distribute--\x3econnect\n connect--\x3erun'}),(0,i.kt)("admonition",{title:"Don't share client connections",type:"important"},(0,i.kt)("p",{parentName:"admonition"},"Although clients may be used by multiple machines, it is neither recommended not will it work simultaneously.\nOnce a client connects to a cluster, it agrees with Gefyra's Operator on a dedicated IP-range that no other client can use at the same time. Clients may ",(0,i.kt)("em",{parentName:"p"},"connect")," and ",(0,i.kt)("em",{parentName:"p"},"disconnect")," at any time. When disconnecting from the cluster, clients release their VPN peer (and thus their IP-range) association.")),(0,i.kt)("admonition",{title:"Prerequisites",type:"note"},(0,i.kt)("ol",{parentName:"admonition"},(0,i.kt)("li",{parentName:"ol"},"Gefyra is ",(0,i.kt)("a",{parentName:"li",href:"https://gefyra.dev/installation"},"available")," (at least in version 2.0.0) "),(0,i.kt)("li",{parentName:"ol"},"Gefyra is ",(0,i.kt)("a",{parentName:"li",href:"./installation"},"installed")," to a shared Kubernetes cluster"),(0,i.kt)("li",{parentName:"ol"},"Admin access to the shared cluster"))),(0,i.kt)("h2",{id:"creating-a-gefyra-client"},"Creating a Gefyra Client"),(0,i.kt)("p",null,"You can create as many clients as you need in a cluster. Every client will have it's very own VPN connection to the cluster.",(0,i.kt)("br",{parentName:"p"}),"\n","An admin manages clients via Gefyra's ",(0,i.kt)("inlineCode",{parentName:"p"},"gefyra client")," command group in the CLI. Gefyra operates with the currently active cluster context on the machine it is running on."),(0,i.kt)("admonition",{title:"Kubernetes context",type:"note"},(0,i.kt)("p",{parentName:"admonition"},"Check your active cluster context with ",(0,i.kt)("inlineCode",{parentName:"p"},"kubectl config current-context"),".")),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-bash"},"> gefyra client\n\nManage clients for a Gefyra installation\n\nCommands:\n config (write) Get a Gefyra connection config for a client\n create Create a new Gefyra client\n delete (rm,remove) Mark a Gefyra client for deletion\n inspect (show,get) Discribe a Gefyra client\n list (ls) List all Gefyra clients\n\n")),(0,i.kt)("p",null,"You can create one client object with:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-bash"},"> gefyra clients create\n\n1 client(s) created successfully\n")),(0,i.kt)("p",null,"That command created a randomly named client in your cluster. You can find it with:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre"},"> gefyra clients ls\nID STATE CREATED\n20d50da476524eaf8dd511deed55fc63 GefyraClientState.REQUESTED Creating...\n")),(0,i.kt)("p",null,"Once the client is ready, you will find the following output:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre"},"> gefyra clients ls\nID STATE CREATED\n20d50da476524eaf8dd511deed55fc63 GefyraClientState.WAITING 2023-10-06T15:21:19.771717Z\n")),(0,i.kt)("p",null,"The client is now in the waiting state and ready for connection."),(0,i.kt)("p",null,"To manage human-readable clients, you can set the client name with:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre"},"gefyra clients create --client-id my-fancy-client\n")),(0,i.kt)("p",null,"or create many clients at once using:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre"},"gefyra clients create -n 10\n")),(0,i.kt)("p",null,"This will create a set of 10 clients in the cluster."),(0,i.kt)("h2",{id:"retrieving-a-client-file"},"Retrieving a ",(0,i.kt)("em",{parentName:"h2"},"Client File")),(0,i.kt)("p",null,"Gefyra clients require a client file to connect to this cluster. The admin is responsible to fetch these client files and\ndistribute them to other machines, developers, etc."),(0,i.kt)("h3",{id:"a-default-client-file"},"A Default Client File"),(0,i.kt)("p",null,"The following command prints the client file of the selected client to the console:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre"},'> gefyra clients config 20d50da476524eaf8dd511deed55fc63\n\n{"client_id": "20d50da476524eaf8dd511deed55fc63", "kubernetes_server": "https://", "provider": "stowaway", "token": "", "namespace": "", "ca_crt": "", "gefyra_server": ":31820"}\n')),(0,i.kt)("p",null,"As you can see, the ",(0,i.kt)("em",{parentName:"p"},"client file")," is JSON-structured and contains a lot of secret information. Especially the\n",(0,i.kt)("em",{parentName:"p"},"access token")," of the Kubernetes service account that is associated with this Gefyra client, but also the other connection\nparameters are ",(0,i.kt)("strong",{parentName:"p"},"highly sensible"),"."),(0,i.kt)("admonition",{title:"Keep client files safe",type:"important"},(0,i.kt)("p",{parentName:"admonition"},"Please handle the ",(0,i.kt)("em",{parentName:"p"},"client files")," with care as they contain confidential information. Leaking these files may\nallow unidentified individuals access to your Gefyra cluster.")),(0,i.kt)("p",null,"You can either pipe that output to a file on your local machine:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre"},"gefyra clients config 20d50da476524eaf8dd511deed55fc63 > 20d50da476524eaf8dd511deed55fc63.json\n")),(0,i.kt)("p",null,"or use the ",(0,i.kt)("em",{parentName:"p"},"output flag")),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre"},"gefyra clients config 20d50da476524eaf8dd511deed55fc63 -o 20d50da476524eaf8dd511deed55fc63.json\n")),(0,i.kt)("p",null,"in your current working directory."),(0,i.kt)("h3",{id:"providing-custom-connection-data"},"Providing Custom Connection Data"),(0,i.kt)("admonition",{title:"Custom networking",type:"important"},(0,i.kt)("p",{parentName:"admonition"},"In this process, Gefyra tries to determine as many connection parameters as possible automatically. However,\nif there are network-related customizations to made for your client, please provide them at this point.")),(0,i.kt)("p",null,"If you need to specify the connection endpoint for Kubernetes differently, please use the ",(0,i.kt)("inlineCode",{parentName:"p"},"--kubernetes-api")," option, e.g."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre"},'gefyra clients config 20d50da476524eaf8dd511deed55fc63 --kubernetes-api "https://k8s.blueshoe.io"\n')),(0,i.kt)("p",null,"If you need to specify Gefyra's VPN connection endpoint, please use the ",(0,i.kt)("inlineCode",{parentName:"p"},"--host")," and/or ",(0,i.kt)("inlineCode",{parentName:"p"},"--port")," option, e.g."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre"},"gefyra clients config 20d50da476524eaf8dd511deed55fc63 --host 192.169.0.1\n")),(0,i.kt)("p",null,"This data will be written into the ",(0,i.kt)("em",{parentName:"p"},"client file")," so that your clients can connect to the cluster using these parameters. If you\nfail to provide correct data to your clients, they might be unable to connect to the cluster. "),(0,i.kt)("h3",{id:"distributing-the-client-file"},"Distributing the Client File"),(0,i.kt)("p",null,"This ",(0,i.kt)("em",{parentName:"p"},"client file")," is all a Gefyra client needs in order to establish a connection. Of course, you are free to distribute these files any way you want, but please keep in mind the security implications."),(0,i.kt)("h2",{id:"deleting-a-gefyra-client"},"Deleting a Gefyra Client"),(0,i.kt)("p",null,"You can delete a Gefyra client in every stage of its lifecycle. This will disconnect the client (forcefully) and render its\n",(0,i.kt)("em",{parentName:"p"},"client file")," invalid, thus the owner of the file will no longer be able to connect to the cluster."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre"},"> gefyra clients delete 20d50da476524eaf8dd511deed55fc63\nClient 20d50da476524eaf8dd511deed55fc63 marked for deletion\n")),(0,i.kt)("p",null,"When you delete a Gefyra client, its credentials are also irretrievably deleted."))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/d05c1138.efa1310b.js b/assets/js/d05c1138.efa1310b.js deleted file mode 100644 index f2b3cc9..0000000 --- a/assets/js/d05c1138.efa1310b.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkgefyra=self.webpackChunkgefyra||[]).push([[7831],{3905:(e,t,n)=>{n.d(t,{Zo:()=>d,kt:()=>m});var a=n(7294);function i(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function r(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function l(e){for(var t=1;t=0||(i[n]=e[n]);return i}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(i[n]=e[n])}return i}var c=a.createContext({}),s=function(e){var t=a.useContext(c),n=t;return e&&(n="function"==typeof e?e(t):l(l({},t),e)),n},d=function(e){var t=s(e.components);return a.createElement(c.Provider,{value:t},e.children)},p="mdxType",u={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},f=a.forwardRef((function(e,t){var n=e.components,i=e.mdxType,r=e.originalType,c=e.parentName,d=o(e,["components","mdxType","originalType","parentName"]),p=s(n),f=i,m=p["".concat(c,".").concat(f)]||p[f]||u[f]||r;return n?a.createElement(m,l(l({ref:t},d),{},{components:n})):a.createElement(m,l({ref:t},d))}));function m(e,t){var n=arguments,i=t&&t.mdxType;if("string"==typeof e||i){var r=n.length,l=new Array(r);l[0]=f;var o={};for(var c in t)hasOwnProperty.call(t,c)&&(o[c]=t[c]);o.originalType=e,o[p]="string"==typeof e?e:i,l[1]=o;for(var s=2;s{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>l,default:()=>u,frontMatter:()=>r,metadata:()=>o,toc:()=>s});var a=n(7462),i=(n(7294),n(3905));const r={title:"Managing Gefyra Clients",sidebar_position:2},l="Working With Gefyra Clients",o={unversionedId:"shared-environments/clients",id:"version-2.0.0/shared-environments/clients",title:"Managing Gefyra Clients",description:"Gefyra Clients provide a way to grant multiple clients (i.e. users, robots, pipelines, etc.) limited access to a Kubernetes cluster in order to use Gefyra's capabilities. They are managed with gefyra clients [COMMAND].",source:"@site/versioned_docs/version-2.0.0/shared-environments/clients.md",sourceDirName:"shared-environments",slug:"/shared-environments/clients",permalink:"/docs/shared-environments/clients",draft:!1,editUrl:"https://github.com/facebook/docusaurus/tree/main/packages/create-docusaurus/templates/shared/versioned_docs/version-2.0.0/shared-environments/clients.md",tags:[],version:"2.0.0",sidebarPosition:2,frontMatter:{title:"Managing Gefyra Clients",sidebar_position:2},sidebar:"docsSidebar",previous:{title:"Installing Gefyra in a Cluster",permalink:"/docs/shared-environments/installation"},next:{title:"Connecting to Gefyra",permalink:"/docs/shared-environments/connecting"}},c={},s=[{value:"Shared Cluster Access",id:"shared-cluster-access",level:2},{value:"Prerequisites",id:"prerequisites",level:2},{value:"Creating a Gefyra Client",id:"creating-a-gefyra-client",level:2},{value:"Retrieving a Client File",id:"retrieving-a-client-file",level:2},{value:"A Default Client File",id:"a-default-client-file",level:3},{value:"Providing Custom Connection Data",id:"providing-custom-connection-data",level:3},{value:"Distributing the Client File",id:"distributing-the-client-file",level:3},{value:"Deleting a Gefyra Client",id:"deleting-a-gefyra-client",level:2}],d={toc:s},p="wrapper";function u(e){let{components:t,...n}=e;return(0,i.kt)(p,(0,a.Z)({},d,n,{components:t,mdxType:"MDXLayout"}),(0,i.kt)("h1",{id:"working-with-gefyra-clients"},"Working With Gefyra Clients"),(0,i.kt)("admonition",{type:"note"},(0,i.kt)("mdxAdmonitionTitle",{parentName:"admonition"},(0,i.kt)("strong",{parentName:"mdxAdmonitionTitle"},"TLDR;")),(0,i.kt)("p",{parentName:"admonition"},"Gefyra Clients provide a way to grant multiple clients (i.e. users, robots, pipelines, etc.) limited access to a Kubernetes cluster in order to use Gefyra's capabilities. They are managed with ",(0,i.kt)("a",{parentName:"p",href:"/docs/cli#clients"},(0,i.kt)("inlineCode",{parentName:"a"},"gefyra clients [COMMAND]")),".")),(0,i.kt)("p",null,"Gefyra introduces the concept of ",(0,i.kt)("strong",{parentName:"p"},"Gefyra Clients"),". These are objects to manage and distribute access to the cluster. "),(0,i.kt)("h2",{id:"shared-cluster-access"},"Shared Cluster Access"),(0,i.kt)("p",null,"Each created client object get a dedicated ",(0,i.kt)("em",{parentName:"p"},"Kubernetes Service Account")," attached that is being used by any Gefyra client during its interaction with the cluster. The corresponding ",(0,i.kt)("em",{parentName:"p"},"client file"),", which contains the connection parameters for the ",(0,i.kt)("em",{parentName:"p"},"Service Account")," can be retrieved from the cluster by the administrator with Gefyra's CLI. "),(0,i.kt)("p",null,"This client file can be then distributed to anyone which needs to ",(0,i.kt)("inlineCode",{parentName:"p"},"connect"),", ",(0,i.kt)("inlineCode",{parentName:"p"},"run")," or ",(0,i.kt)("inlineCode",{parentName:"p"},"bridge")," workloads in the given cluster.\nThe permissions of the Kubernetes service account are limited, following the principle of the least privilege. Hence, Gefyra clients can only operate in the cluster with the well-defined set Gefyra's actions."),(0,i.kt)("p",null,"This flow gives a brief overview of Gefyra's workflow for teams:"),(0,i.kt)("mermaid",{value:'flowchart TD;\n install["DevOps installs Gefyra (gefyra install)"]\n generate["DevOps generates Gefyra client (gefyra clients create)"]\n save["DevOps saves Gefyra client files (gefyra clients config)"]\n distribute["DevOps distributes client file"]\n connect["Developer connects via client file (gefyra connections)"]\n run["Developer runs workload (gefyra run)"]\n install--\x3egenerate\n generate--\x3esave\n save--\x3edistribute\n distribute--\x3econnect\n connect--\x3erun'}),(0,i.kt)("p",null,(0,i.kt)("strong",{parentName:"p"},"Important:")," Although clients may be shared by multiple machines, it is neither recommended not will it work simultaneously.\nOnce a client connects to a cluster, it agrees with Gefyra's Operator on a dedicated IP-range that no other client can use at the same time. Clients may ",(0,i.kt)("em",{parentName:"p"},"connect")," and ",(0,i.kt)("em",{parentName:"p"},"disconnect")," at any time. When disconnecting from the cluster, clients release their VPN peer (and thus their IP-range) association."),(0,i.kt)("h2",{id:"prerequisites"},"Prerequisites"),(0,i.kt)("ol",null,(0,i.kt)("li",{parentName:"ol"},"Gefyra is ",(0,i.kt)("a",{parentName:"li",href:"https://gefyra.dev/installation"},"available")," (at least in version 2.0.0) "),(0,i.kt)("li",{parentName:"ol"},"Gefyra is ",(0,i.kt)("a",{parentName:"li",href:"./installation"},"installed")," to a shared Kubernetes cluster"),(0,i.kt)("li",{parentName:"ol"},"Admin access to the shared cluster")),(0,i.kt)("h2",{id:"creating-a-gefyra-client"},"Creating a Gefyra Client"),(0,i.kt)("p",null,"You can create as many clients as you need in a cluster. Every client will have it's very own VPN connection to the cluster.",(0,i.kt)("br",{parentName:"p"}),"\n","An admin manages clients via Gefyra's ",(0,i.kt)("inlineCode",{parentName:"p"},"gefyra client")," command group in the CLI. Gefyra operates with the currently active cluster context on the machine it is running on."),(0,i.kt)("p",null,(0,i.kt)("strong",{parentName:"p"},"Remark:")," Check your active cluster context with ",(0,i.kt)("inlineCode",{parentName:"p"},"kubectl config current-context"),"."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-bash"},"> gefyra client\n\nManage clients for a Gefyra installation\n\nCommands:\n config (write) Get a Gefyra connection config for a client\n create Create a new Gefyra client\n delete (rm,remove) Mark a Gefyra client for deletion\n inspect (show,get) Discribe a Gefyra client\n list (ls) List all Gefyra clients\n\n")),(0,i.kt)("p",null,"You can create one client object with:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-bash"},"> gefyra clients create\n\n1 client(s) created successfully\n")),(0,i.kt)("p",null,"That command created a randomly named client in your cluster. You can find it with:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre"},"> gefyra clients ls\nID STATE CREATED\n20d50da476524eaf8dd511deed55fc63 GefyraClientState.REQUESTED Creating...\n")),(0,i.kt)("p",null,"Once the client is ready, you will find the following output:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre"},"> gefyra clients ls\nID STATE CREATED\n20d50da476524eaf8dd511deed55fc63 GefyraClientState.WAITING 2023-10-06T15:21:19.771717Z\n")),(0,i.kt)("p",null,"The client is now in the waiting state and ready for connection."),(0,i.kt)("p",null,"To manage human-readable clients, you can set the client name with:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre"},"gefyra clients create --client-id my-fancy-client\n")),(0,i.kt)("p",null,"or create many clients at once using:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre"},"gefyra clients create -n 10\n")),(0,i.kt)("p",null,"This will create a set of 10 clients in the cluster."),(0,i.kt)("h2",{id:"retrieving-a-client-file"},"Retrieving a ",(0,i.kt)("em",{parentName:"h2"},"Client File")),(0,i.kt)("p",null,"Gefyra clients require a client file to connect to this cluster. The admin is responsible to fetch these client files and\ndistribute them to other machines, developers, etc."),(0,i.kt)("h3",{id:"a-default-client-file"},"A Default Client File"),(0,i.kt)("p",null,"The following command prints the client file of the selected client to the console:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre"},'> gefyra clients config 20d50da476524eaf8dd511deed55fc63\n\n{"client_id": "20d50da476524eaf8dd511deed55fc63", "kubernetes_server": "https://", "provider": "stowaway", "token": "", "namespace": "", "ca_crt": "", "gefyra_server": ":31820"}\n')),(0,i.kt)("p",null,"As you can see, the ",(0,i.kt)("em",{parentName:"p"},"client file")," is JSON-structured and contains a lot of secret information. Especially the\n",(0,i.kt)("em",{parentName:"p"},"access token")," of the Kubernetes service account that is associated with this Gefyra client, but also the other connection\nparameters are ",(0,i.kt)("strong",{parentName:"p"},"highly sensible"),"."),(0,i.kt)("p",null,(0,i.kt)("strong",{parentName:"p"},"Important:")," Please handle the ",(0,i.kt)("em",{parentName:"p"},"client files")," with care as they contain confidential information. Leaking these files may\nallow unidentified individuals access to your Gefyra cluster."),(0,i.kt)("p",null,"You can either pipe that output to a file on your local machine:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre"},"gefyra clients config 20d50da476524eaf8dd511deed55fc63 > 20d50da476524eaf8dd511deed55fc63.json\n")),(0,i.kt)("p",null,"or use the ",(0,i.kt)("em",{parentName:"p"},"output flag")),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre"},"gefyra clients config 20d50da476524eaf8dd511deed55fc63 -o 20d50da476524eaf8dd511deed55fc63.json\n")),(0,i.kt)("p",null,"in your current working directory."),(0,i.kt)("h3",{id:"providing-custom-connection-data"},"Providing Custom Connection Data"),(0,i.kt)("p",null,(0,i.kt)("strong",{parentName:"p"},"Important:")," In this process, Gefyra tries to determine as many connection parameters as possible automatically. However,\nif there are network-related customizations to made for your client, please provide them at this point."),(0,i.kt)("p",null,"If you need to specify the connection endpoint for Kubernetes differently, please use the ",(0,i.kt)("inlineCode",{parentName:"p"},"--kubernetes-api")," option, e.g."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre"},'gefyra clients config 20d50da476524eaf8dd511deed55fc63 -o 20d50da476524eaf8dd511deed55fc63.json --kubernetes-api "https://k8s.blueshoe.io"\n')),(0,i.kt)("p",null,"If you need to specify Gefyra's VPN connection endpoint, please use the ",(0,i.kt)("inlineCode",{parentName:"p"},"--host")," and/or ",(0,i.kt)("inlineCode",{parentName:"p"},"--port")," option, e.g."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre"},"gefyra clients config 20d50da476524eaf8dd511deed55fc63 --host 192.169.0.1\n")),(0,i.kt)("p",null,"This data will be written into the ",(0,i.kt)("em",{parentName:"p"},"client file")," so that your clients can connect to the cluster using these parameters. If you\nfail to provide correct data to your clients, they might be unable to connect to the cluster. "),(0,i.kt)("h3",{id:"distributing-the-client-file"},"Distributing the Client File"),(0,i.kt)("p",null,"This ",(0,i.kt)("em",{parentName:"p"},"client file")," is all a Gefyra client needs in order to establish a connection. Of course, you are free to distribute these files any way you want, but please keep in mind the security implications."),(0,i.kt)("h2",{id:"deleting-a-gefyra-client"},"Deleting a Gefyra Client"),(0,i.kt)("p",null,"You can delete a Gefyra client in every stage of its lifecycle. This will disconnect the client (forcefully) and render its\n",(0,i.kt)("em",{parentName:"p"},"client file")," invalid to that the owner of the file will no longer be able to connect to the cluster."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre"},"> gefyra clients delete 20d50da476524eaf8dd511deed55fc63\nClient 20d50da476524eaf8dd511deed55fc63 marked for deletion\n")),(0,i.kt)("p",null,"When you delete a Gefyra client, its credentials are also irretrievably deleted."))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/runtime~main.27397ec1.js b/assets/js/runtime~main.e560b7b0.js similarity index 62% rename from assets/js/runtime~main.27397ec1.js rename to assets/js/runtime~main.e560b7b0.js index 2c8e484..de72352 100644 --- a/assets/js/runtime~main.27397ec1.js +++ b/assets/js/runtime~main.e560b7b0.js @@ -1 +1 @@ -(()=>{"use strict";var e,a,d,c,f,t={},r={};function b(e){var a=r[e];if(void 0!==a)return a.exports;var d=r[e]={id:e,loaded:!1,exports:{}};return t[e].call(d.exports,d,d.exports,b),d.loaded=!0,d.exports}b.m=t,b.c=r,e=[],b.O=(a,d,c,f)=>{if(!d){var t=1/0;for(i=0;i=f)&&Object.keys(b.O).every((e=>b.O[e](d[o])))?d.splice(o--,1):(r=!1,f0&&e[i-1][2]>f;i--)e[i]=e[i-1];e[i]=[d,c,f]},b.n=e=>{var a=e&&e.__esModule?()=>e.default:()=>e;return b.d(a,{a:a}),a},d=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,b.t=function(e,c){if(1&c&&(e=this(e)),8&c)return e;if("object"==typeof e&&e){if(4&c&&e.__esModule)return e;if(16&c&&"function"==typeof e.then)return e}var f=Object.create(null);b.r(f);var t={};a=a||[null,d({}),d([]),d(d)];for(var r=2&c&&e;"object"==typeof r&&!~a.indexOf(r);r=d(r))Object.getOwnPropertyNames(r).forEach((a=>t[a]=()=>e[a]));return t.default=()=>e,b.d(f,t),f},b.d=(e,a)=>{for(var d in a)b.o(a,d)&&!b.o(e,d)&&Object.defineProperty(e,d,{enumerable:!0,get:a[d]})},b.f={},b.e=e=>Promise.all(Object.keys(b.f).reduce(((a,d)=>(b.f[d](e,a),a)),[])),b.u=e=>"assets/js/"+({87:"c3a4c978",137:"4cf72cd7",354:"76c13120",365:"019976ec",376:"b4d4144e",1117:"356a0ac6",1275:"7e7872da",1441:"830dd046",1558:"e7dcf0c0",1570:"e345da46",2241:"5bd23930",2248:"2f4543b6",2334:"ebfc083d",2350:"7105be3b",2362:"d7382bb8",2379:"6218705d",3085:"1f391b9e",3211:"3319d582",3857:"697c1874",3992:"528572e5",4001:"efac4d55",4195:"c4f5d8e4",4462:"17f524a1",4633:"960a2762",4747:"2f539f71",5016:"2b034462",5197:"5e21fcf4",5267:"a16b1d7d",5411:"6e7a8bf0",5466:"41f98333",5485:"9aa54785",5504:"a6736a7f",5527:"a2c87832",5618:"038c0509",5741:"822934b1",5822:"78d20b9e",5854:"7808a8db",5932:"b79688f0",6046:"0e0ef756",6054:"09cc19e6",6372:"dafa31c9",6748:"c85e2438",7007:"17ba7987",7236:"ed772d97",7251:"d042d518",7254:"501550bc",7373:"a23109c2",7431:"375b7ae0",7473:"3e58c4d1",7533:"2205ec8f",7535:"02715c9e",7548:"c5e3162a",7636:"ac25eaa6",7766:"d08bb645",7790:"44be7f93",7831:"d05c1138",7918:"17896441",8075:"432bef5e",8267:"08628891",8364:"ab32173c",8533:"d140cf79",8901:"25d44612",8908:"013d0b61",9167:"2c084ab6",9514:"1be78505",9584:"07de683e",9869:"634e55f7"}[e]||e)+"."+{87:"7c3dd790",137:"a5bed376",354:"78792374",365:"98e548a2",376:"66acc598",1117:"56bceb83",1275:"02c9e4f4",1441:"86388023",1558:"3ad7c618",1570:"6262a5ca",2241:"0c13b988",2248:"1036cae4",2334:"49daf56c",2350:"ff0d0f8d",2362:"9310caa0",2379:"35701b6e",2784:"41c18c4e",3085:"d2b843bf",3211:"16f0a141",3857:"e66a568f",3992:"cd4fc582",4001:"ac3a59af",4195:"93554b3b",4462:"d29221da",4633:"f308c803",4747:"0b7ed128",4972:"4975fa39",5016:"39d30f0b",5197:"25729260",5267:"7cfd8542",5411:"3f412d33",5466:"2a14239a",5485:"2289cea5",5504:"3b25467d",5527:"c279beb1",5618:"5ebe91b9",5741:"f12ece39",5822:"f29ff696",5854:"912a8eb1",5932:"b52cbc27",6046:"a37d43b2",6054:"faabd8b2",6316:"6ac9aa47",6372:"14a5e19c",6748:"735ea58b",7007:"55c5cc53",7236:"036a1ef0",7251:"73f7f80c",7254:"3763462d",7373:"e82b37b6",7431:"0bb43e8b",7473:"b53b61c3",7533:"bedcb245",7535:"fbcff63c",7548:"9302e7be",7636:"110b517a",7724:"5df0e9eb",7766:"c18ba5a2",7790:"f511a046",7831:"efa1310b",7918:"45f5a16b",8075:"fb905919",8267:"8b28d2cd",8364:"3a7974db",8533:"963dbe16",8901:"cbb35c49",8908:"96356daf",9167:"f49c218d",9487:"1f60d24d",9514:"e2007a98",9584:"206886a5",9869:"9a6ef9c2"}[e]+".js",b.miniCssF=e=>{},b.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),b.o=(e,a)=>Object.prototype.hasOwnProperty.call(e,a),c={},f="gefyra:",b.l=(e,a,d,t)=>{if(c[e])c[e].push(a);else{var r,o;if(void 0!==d)for(var n=document.getElementsByTagName("script"),i=0;i{r.onerror=r.onload=null,clearTimeout(s);var f=c[e];if(delete c[e],r.parentNode&&r.parentNode.removeChild(r),f&&f.forEach((e=>e(d))),a)return a(d)},s=setTimeout(l.bind(null,void 0,{type:"timeout",target:r}),12e4);r.onerror=l.bind(null,r.onerror),r.onload=l.bind(null,r.onload),o&&document.head.appendChild(r)}},b.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},b.p="/",b.gca=function(e){return e={17896441:"7918",c3a4c978:"87","4cf72cd7":"137","76c13120":"354","019976ec":"365",b4d4144e:"376","356a0ac6":"1117","7e7872da":"1275","830dd046":"1441",e7dcf0c0:"1558",e345da46:"1570","5bd23930":"2241","2f4543b6":"2248",ebfc083d:"2334","7105be3b":"2350",d7382bb8:"2362","6218705d":"2379","1f391b9e":"3085","3319d582":"3211","697c1874":"3857","528572e5":"3992",efac4d55:"4001",c4f5d8e4:"4195","17f524a1":"4462","960a2762":"4633","2f539f71":"4747","2b034462":"5016","5e21fcf4":"5197",a16b1d7d:"5267","6e7a8bf0":"5411","41f98333":"5466","9aa54785":"5485",a6736a7f:"5504",a2c87832:"5527","038c0509":"5618","822934b1":"5741","78d20b9e":"5822","7808a8db":"5854",b79688f0:"5932","0e0ef756":"6046","09cc19e6":"6054",dafa31c9:"6372",c85e2438:"6748","17ba7987":"7007",ed772d97:"7236",d042d518:"7251","501550bc":"7254",a23109c2:"7373","375b7ae0":"7431","3e58c4d1":"7473","2205ec8f":"7533","02715c9e":"7535",c5e3162a:"7548",ac25eaa6:"7636",d08bb645:"7766","44be7f93":"7790",d05c1138:"7831","432bef5e":"8075","08628891":"8267",ab32173c:"8364",d140cf79:"8533","25d44612":"8901","013d0b61":"8908","2c084ab6":"9167","1be78505":"9514","07de683e":"9584","634e55f7":"9869"}[e]||e,b.p+b.u(e)},(()=>{var e={1303:0,532:0};b.f.j=(a,d)=>{var c=b.o(e,a)?e[a]:void 0;if(0!==c)if(c)d.push(c[2]);else if(/^(1303|532)$/.test(a))e[a]=0;else{var f=new Promise(((d,f)=>c=e[a]=[d,f]));d.push(c[2]=f);var t=b.p+b.u(a),r=new Error;b.l(t,(d=>{if(b.o(e,a)&&(0!==(c=e[a])&&(e[a]=void 0),c)){var f=d&&("load"===d.type?"missing":d.type),t=d&&d.target&&d.target.src;r.message="Loading chunk "+a+" failed.\n("+f+": "+t+")",r.name="ChunkLoadError",r.type=f,r.request=t,c[1](r)}}),"chunk-"+a,a)}},b.O.j=a=>0===e[a];var a=(a,d)=>{var c,f,t=d[0],r=d[1],o=d[2],n=0;if(t.some((a=>0!==e[a]))){for(c in r)b.o(r,c)&&(b.m[c]=r[c]);if(o)var i=o(b)}for(a&&a(d);n{"use strict";var e,a,c,d,f,t={},r={};function b(e){var a=r[e];if(void 0!==a)return a.exports;var c=r[e]={id:e,loaded:!1,exports:{}};return t[e].call(c.exports,c,c.exports,b),c.loaded=!0,c.exports}b.m=t,b.c=r,e=[],b.O=(a,c,d,f)=>{if(!c){var t=1/0;for(i=0;i=f)&&Object.keys(b.O).every((e=>b.O[e](c[o])))?c.splice(o--,1):(r=!1,f0&&e[i-1][2]>f;i--)e[i]=e[i-1];e[i]=[c,d,f]},b.n=e=>{var a=e&&e.__esModule?()=>e.default:()=>e;return b.d(a,{a:a}),a},c=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,b.t=function(e,d){if(1&d&&(e=this(e)),8&d)return e;if("object"==typeof e&&e){if(4&d&&e.__esModule)return e;if(16&d&&"function"==typeof e.then)return e}var f=Object.create(null);b.r(f);var t={};a=a||[null,c({}),c([]),c(c)];for(var r=2&d&&e;"object"==typeof r&&!~a.indexOf(r);r=c(r))Object.getOwnPropertyNames(r).forEach((a=>t[a]=()=>e[a]));return t.default=()=>e,b.d(f,t),f},b.d=(e,a)=>{for(var c in a)b.o(a,c)&&!b.o(e,c)&&Object.defineProperty(e,c,{enumerable:!0,get:a[c]})},b.f={},b.e=e=>Promise.all(Object.keys(b.f).reduce(((a,c)=>(b.f[c](e,a),a)),[])),b.u=e=>"assets/js/"+({87:"c3a4c978",137:"4cf72cd7",354:"76c13120",365:"019976ec",376:"b4d4144e",1117:"356a0ac6",1275:"7e7872da",1441:"830dd046",1558:"e7dcf0c0",1570:"e345da46",2241:"5bd23930",2248:"2f4543b6",2334:"ebfc083d",2350:"7105be3b",2362:"d7382bb8",2379:"6218705d",3085:"1f391b9e",3211:"3319d582",3857:"697c1874",3992:"528572e5",4001:"efac4d55",4195:"c4f5d8e4",4462:"17f524a1",4633:"960a2762",4747:"2f539f71",5016:"2b034462",5197:"5e21fcf4",5267:"a16b1d7d",5411:"6e7a8bf0",5466:"41f98333",5485:"9aa54785",5504:"a6736a7f",5527:"a2c87832",5618:"038c0509",5741:"822934b1",5822:"78d20b9e",5854:"7808a8db",5932:"b79688f0",6046:"0e0ef756",6054:"09cc19e6",6372:"dafa31c9",6748:"c85e2438",7007:"17ba7987",7236:"ed772d97",7251:"d042d518",7254:"501550bc",7373:"a23109c2",7431:"375b7ae0",7473:"3e58c4d1",7533:"2205ec8f",7535:"02715c9e",7548:"c5e3162a",7636:"ac25eaa6",7766:"d08bb645",7790:"44be7f93",7831:"d05c1138",7918:"17896441",8075:"432bef5e",8267:"08628891",8364:"ab32173c",8533:"d140cf79",8901:"25d44612",8908:"013d0b61",9167:"2c084ab6",9514:"1be78505",9584:"07de683e",9869:"634e55f7"}[e]||e)+"."+{87:"7c3dd790",137:"a5bed376",354:"78792374",365:"98e548a2",376:"66acc598",1117:"56bceb83",1275:"02c9e4f4",1441:"86388023",1558:"3ad7c618",1570:"6262a5ca",2241:"0c13b988",2248:"1036cae4",2334:"49daf56c",2350:"ff0d0f8d",2362:"9310caa0",2379:"35701b6e",2784:"41c18c4e",3085:"d2b843bf",3211:"16f0a141",3857:"e66a568f",3992:"cd4fc582",4001:"ac3a59af",4195:"93554b3b",4462:"d29221da",4633:"f308c803",4747:"c7df4220",4972:"4975fa39",5016:"39d30f0b",5197:"25729260",5267:"7321bb72",5411:"3f412d33",5466:"2a14239a",5485:"2289cea5",5504:"3b25467d",5527:"c279beb1",5618:"5ebe91b9",5741:"f12ece39",5822:"f29ff696",5854:"912a8eb1",5932:"b52cbc27",6046:"a37d43b2",6054:"faabd8b2",6316:"6ac9aa47",6372:"14a5e19c",6748:"735ea58b",7007:"55c5cc53",7236:"036a1ef0",7251:"73f7f80c",7254:"3763462d",7373:"e82b37b6",7431:"0bb43e8b",7473:"b53b61c3",7533:"bedcb245",7535:"fbcff63c",7548:"9302e7be",7636:"110b517a",7724:"5df0e9eb",7766:"c18ba5a2",7790:"f511a046",7831:"920814ad",7918:"45f5a16b",8075:"fb905919",8267:"8b28d2cd",8364:"3a7974db",8533:"963dbe16",8901:"cbb35c49",8908:"96356daf",9167:"f49c218d",9487:"1f60d24d",9514:"e2007a98",9584:"206886a5",9869:"9a6ef9c2"}[e]+".js",b.miniCssF=e=>{},b.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),b.o=(e,a)=>Object.prototype.hasOwnProperty.call(e,a),d={},f="gefyra:",b.l=(e,a,c,t)=>{if(d[e])d[e].push(a);else{var r,o;if(void 0!==c)for(var n=document.getElementsByTagName("script"),i=0;i{r.onerror=r.onload=null,clearTimeout(s);var f=d[e];if(delete d[e],r.parentNode&&r.parentNode.removeChild(r),f&&f.forEach((e=>e(c))),a)return a(c)},s=setTimeout(l.bind(null,void 0,{type:"timeout",target:r}),12e4);r.onerror=l.bind(null,r.onerror),r.onload=l.bind(null,r.onload),o&&document.head.appendChild(r)}},b.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},b.p="/",b.gca=function(e){return e={17896441:"7918",c3a4c978:"87","4cf72cd7":"137","76c13120":"354","019976ec":"365",b4d4144e:"376","356a0ac6":"1117","7e7872da":"1275","830dd046":"1441",e7dcf0c0:"1558",e345da46:"1570","5bd23930":"2241","2f4543b6":"2248",ebfc083d:"2334","7105be3b":"2350",d7382bb8:"2362","6218705d":"2379","1f391b9e":"3085","3319d582":"3211","697c1874":"3857","528572e5":"3992",efac4d55:"4001",c4f5d8e4:"4195","17f524a1":"4462","960a2762":"4633","2f539f71":"4747","2b034462":"5016","5e21fcf4":"5197",a16b1d7d:"5267","6e7a8bf0":"5411","41f98333":"5466","9aa54785":"5485",a6736a7f:"5504",a2c87832:"5527","038c0509":"5618","822934b1":"5741","78d20b9e":"5822","7808a8db":"5854",b79688f0:"5932","0e0ef756":"6046","09cc19e6":"6054",dafa31c9:"6372",c85e2438:"6748","17ba7987":"7007",ed772d97:"7236",d042d518:"7251","501550bc":"7254",a23109c2:"7373","375b7ae0":"7431","3e58c4d1":"7473","2205ec8f":"7533","02715c9e":"7535",c5e3162a:"7548",ac25eaa6:"7636",d08bb645:"7766","44be7f93":"7790",d05c1138:"7831","432bef5e":"8075","08628891":"8267",ab32173c:"8364",d140cf79:"8533","25d44612":"8901","013d0b61":"8908","2c084ab6":"9167","1be78505":"9514","07de683e":"9584","634e55f7":"9869"}[e]||e,b.p+b.u(e)},(()=>{var e={1303:0,532:0};b.f.j=(a,c)=>{var d=b.o(e,a)?e[a]:void 0;if(0!==d)if(d)c.push(d[2]);else if(/^(1303|532)$/.test(a))e[a]=0;else{var f=new Promise(((c,f)=>d=e[a]=[c,f]));c.push(d[2]=f);var t=b.p+b.u(a),r=new Error;b.l(t,(c=>{if(b.o(e,a)&&(0!==(d=e[a])&&(e[a]=void 0),d)){var f=c&&("load"===c.type?"missing":c.type),t=c&&c.target&&c.target.src;r.message="Loading chunk "+a+" failed.\n("+f+": "+t+")",r.name="ChunkLoadError",r.type=f,r.request=t,d[1](r)}}),"chunk-"+a,a)}},b.O.j=a=>0===e[a];var a=(a,c)=>{var d,f,t=c[0],r=c[1],o=c[2],n=0;if(t.some((a=>0!==e[a]))){for(d in r)b.o(r,d)&&(b.m[d]=r[d]);if(o)var i=o(b)}for(a&&a(c);n - + @@ -29,7 +29,7 @@ Gefyra was heavily inspired by the free part of Telepresence 2.

License

Gefyra is distributed by an Apache-2.0 License.

Contributors

This open-source project is currently mainly carried out by
Michael Schilonka

Follow me on
LinkedIn

Sponsors

This project is sponsored by Blueshoe GmbH.

- + \ No newline at end of file diff --git a/docs/1.x/cli/index.html b/docs/1.x/cli/index.html index 338a87f..b6b9a52 100644 --- a/docs/1.x/cli/index.html +++ b/docs/1.x/cli/index.html @@ -16,7 +16,7 @@ - + @@ -39,7 +39,7 @@ No arguments available.

version

Display the current version and exit.

Example:

gefyra version

Arguments:
No arguments available.

status

Display the status of Gefyra on the local machine and the cluster.

Example:

gefyra status

Arguments:
No arguments available.

telemetry

Gefyra anonymously tracks its usage by collecting telemetry data. Telemetry is enabled by default.

Example:

gefyra telemetry --on

Arguments:

ArgumentDescription
--offTurn off telemetry
--onTurn on telemetry
- + \ No newline at end of file diff --git a/docs/1.x/docker-extension/index.html b/docs/1.x/docker-extension/index.html index c4b8b97..34c8db5 100644 --- a/docs/1.x/docker-extension/index.html +++ b/docs/1.x/docker-extension/index.html @@ -16,7 +16,7 @@ - + @@ -33,7 +33,7 @@ As soon as you're done hit run!

Docker Desktop Extension Load Gefyra ensures that its cluster components are in the correct state and starts the container.

Once the container is running Gefyra will show you the logs of the container.

Provide us with your feedback

Did everything work as expected? How was the experience of using Gefyra? We'd appreciate if you could take 2 minutes of your time to fill out our feedback form.

- + \ No newline at end of file diff --git a/docs/1.x/enterprise/index.html b/docs/1.x/enterprise/index.html index b7266c1..f100403 100644 --- a/docs/1.x/enterprise/index.html +++ b/docs/1.x/enterprise/index.html @@ -16,7 +16,7 @@ - + @@ -24,7 +24,7 @@
Version: 1.x

For Enterprise

Gefyra for Enterprise is a commercial version of Gefyra. It is designed for companies that want to use Gefyra with individual support and additional features.

Multi peer development

Personal intercepts

Individual priority support

Individual feature development

Enterprise compliance


Let's talk


Or get in touch


Mail: hello@gefyra.dev

Phone: +49 89 541 984 22

- + \ No newline at end of file diff --git a/docs/1.x/getting-started/colima/index.html b/docs/1.x/getting-started/colima/index.html index b8234e5..b76fe43 100644 --- a/docs/1.x/getting-started/colima/index.html +++ b/docs/1.x/getting-started/colima/index.html @@ -16,7 +16,7 @@ - + @@ -26,7 +26,7 @@
Version: 1.x

Getting started with Gefyra and Colima Kubernetes

This guide will show you how to use Gefyra for the local development of a Kubernetes application running in Colima Kubernetes.

Prerequisites

  1. Follow the installation for your preferred platform.

  2. Create a local Kubernetes cluster with colima:

colima start --kubernetes --network-address

Find out the network address of your VM:

colima list
PROFILE STATUS ARCH CPUS MEMORY DISK RUNTIME ADDRESS
default Running x86_64 2 2GiB 60GiB docker+k3s 192.168.106.2

Install Gefyra components in the cluster:

gefyra up --host=192.168.106.2
  1. Apply some workload, for example from the testing directory of this repo:
kubectl apply -f https://raw.githubusercontent.com/gefyrahq/gefyra/main/testing/workloads/hello.yaml

Check out this workload running under: http://hello.127.0.0.1.nip.io:8080/

Running Gefyra

  1. Run a local Docker image with Gefyra in order to make it part of the cluster.

    1. Build your Docker image with a local tag, for example from the testing directory: cd testing/images/ && docker build -f Dockerfile.local . -t pyserver
    2. Execute Gefyra's run command:
      gefyra run -i pyserver -N mypyserver -n default
    3. exec into the running container and look around. You will find the container to run within your Kubernetes cluster.
      docker exec -it mypyserver bash
      wget -O- hello-nginx
      will print out the website of the cluster service hello-nginx from within the cluster.
  2. Create a bridge in order to intercept the traffic to the cluster application with the one running locally:

gefyra bridge -N mypyserver -n default --port 8000:80 --target deploy/hello-nginxdemo/hello-nginx

Check out the locally running server comes up under: http://hello.127.0.0.1.nip.io:8080/

  1. List all running bridges:
gefyra list --bridges
  1. Unbridge the local container and reset the cluster to its original state:
gefyra unbridge -N mypybridge

Check out the initial response from: http://hello.127.0.0.1.nip.io:8080/

Cleaning up

  1. Remove Gefyra's components from the cluster with
gefyra down
  1. Remove the locally running Kubernetes cluster with
colima delete

Provide us with your feedback

Did everything work as expected? How was the experience of using Gefyra? We'd appreciate if you could take 2 minutes of your time to fill out our feedback form.

- + \ No newline at end of file diff --git a/docs/1.x/getting-started/docker_desktop_osx/index.html b/docs/1.x/getting-started/docker_desktop_osx/index.html index b4c7753..e9f9a3b 100644 --- a/docs/1.x/getting-started/docker_desktop_osx/index.html +++ b/docs/1.x/getting-started/docker_desktop_osx/index.html @@ -16,7 +16,7 @@ - + @@ -31,7 +31,7 @@ ingress controller like this:
kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.2.1/deploy/static/provider/cloud/deploy.yaml
  1. Now patch the nginx ingress controller service to make port 8080 available:
kubectl patch svc -n ingress-nginx ingress-nginx-controller -p '{"spec": {"ports": [{"appProtocol": "http", "name": "http", "port": 8080, "protocol": "TCP", "targetPort": "http"}]}}' --type merge
  1. Apply some workload, for example from the testing directory of this repo:
kubectl apply -f https://raw.githubusercontent.com/gefyrahq/gefyra/main/testing/workloads/hello_dd.yaml

Check out this workload running under: http://hello.127.0.0.1.nip.io:8080/

  1. Set up Gefyra with the following command:

For Docker Desktop <4.16.x:

gefyra up

For Docker Desktop >=4.16.x:

gefyra up --host=kubernetes.docker.internal

Running Gefyra

  1. Run a local Docker image with Gefyra in order to make it part of the cluster.

    1. Build your Docker image with a local tag, for example from the testing directory: cd testing/images/ && docker build -f Dockerfile.local . -t pyserver
    2. Execute Gefyra's run command:
      gefyra run -i pyserver -N mypyserver -n default
    3. exec into the running container and look around. You will find the container to run within your Kubernetes cluster.
      docker exec -it mypyserver bash
      wget -O- hello-nginx
      will print out the website of the cluster service hello-nginx from within the cluster.
  2. Create a bridge in order to intercept the traffic to the cluster application with the one running locally:

gefyra bridge -N mypyserver -n default --port 8000:80 --target deploy/hello-nginxdemo/hello-nginx

Check out the locally running server comes up under: http://hello.127.0.0.1.nip.io:8080/

  1. List all running bridges:
gefyra list --bridges
  1. Unbridge the local container and reset the cluster to its original state:
gefyra unbridge -N mypybridge

Check out the initial response from: http://hello.127.0.0.1.nip.io:8080/

Cleaning up

  1. Remove Gefyra's components from the cluster with
gefyra down

Provide us with your feedback

Did everything work as expected? How was the experience of using Gefyra? We'd appreciate if you could take 2 minutes of your time to fill out our feedback form.

- + \ No newline at end of file diff --git a/docs/1.x/getting-started/eks/index.html b/docs/1.x/getting-started/eks/index.html index c60ec36..71a38bb 100644 --- a/docs/1.x/getting-started/eks/index.html +++ b/docs/1.x/getting-started/eks/index.html @@ -16,7 +16,7 @@ - + @@ -30,7 +30,7 @@ them by running kubectl get nodes -o wide | awk {'print $1" " $2 " " $7'} | column -t. Pick one of them from the EXTERNAL-IP column.
  • Now you can run gefyra up --host <IP>
  • Run a local Docker image with Gefyra to make it part of the cluster.
    1. Build your Docker image with a local tag, for example from the testing directory: cd testing/images/ && docker build -f Dockerfile.local . -t pyserver
    2. Execute Gefyra's run command:
      gefyra run -i pyserver -N mypyserver -n default
    3. Exec into the running container and look around. You will find the container to run within your Kubernetes cluster.
      docker exec -it mypyserver bash
      wget -O- hello-nginx will print out the website of the cluster service hello-nginx from within the cluster.
  • Create a bridge to intercept the traffic to the cluster application with the one running locally:
    gefyra bridge -N mypyserver -n default --port 80:8000 --target deploy/hello-nginxdemo/hello-nginx
  • List all running bridges:
    gefyra list --bridges
  • Unbridge the local container and reset the cluster to its original state:
    gefyra unbridge -N mypybridge
  • Cleaning up

    Remove Gefyra's components from the cluster with gefyra down

    Provide us with your feedback

    Did everything work as expected? How was the experience of using Gefyra? We'd appreciate if you could take 2 minutes of your time to fill out our feedback form.

    - + \ No newline at end of file diff --git a/docs/1.x/getting-started/gcp/index.html b/docs/1.x/getting-started/gcp/index.html index 8421a84..7659ec9 100644 --- a/docs/1.x/getting-started/gcp/index.html +++ b/docs/1.x/getting-started/gcp/index.html @@ -16,7 +16,7 @@ - + @@ -35,7 +35,7 @@ cd testing/images/ && docker build -f Dockerfile.local . -t pyserver
  • Execute Gefyra's run command:
    gefyra run -i pyserver -N mypyserver -n default
  • Exec into the running container and look around. You will find the container to run within your Kubernetes cluster.
    docker exec -it mypyserver bash
    wget -O- hello-nginx will print out the website of the cluster service hello-nginx from within the cluster.
  • Create a bridge in order to intercept the traffic to the cluster application with the one running locally:
    gefyra bridge -N mypyserver -n default --port 80:8000 --target deploy/hello-nginxdemo/hello-nginx
  • List all running bridges:
    gefyra list --bridges
  • Unbridge the local container and reset the cluster to its original state: gefyra unbridge -N mypybridge
  • Cleaning up

    Remove Gefyra's components from the cluster with gefyra down

    Provide us with your feedback

    Did everything work as expected? How was the experience of using Gefyra? We'd appreciate if you could take 2 minutes of your time to fill out our feedback form.

    - + \ No newline at end of file diff --git a/docs/1.x/getting-started/index.html b/docs/1.x/getting-started/index.html index d0c6be0..6787a05 100644 --- a/docs/1.x/getting-started/index.html +++ b/docs/1.x/getting-started/index.html @@ -16,7 +16,7 @@ - + @@ -27,7 +27,7 @@ different Kubernetes solutions, both local and remote.

    Hey! We would be very happy to know about your Kubernetes development setup. If you can't find your distribuition in this list, please request a guide by creating a GitHub issue using this template.
    It's that simple and very helpful.

    Select your preferred Kubernetes provider from below to start working with Gefyra.

    - + \ No newline at end of file diff --git a/docs/1.x/getting-started/k3d/index.html b/docs/1.x/getting-started/k3d/index.html index 0c36d4b..4b61fd1 100644 --- a/docs/1.x/getting-started/k3d/index.html +++ b/docs/1.x/getting-started/k3d/index.html @@ -16,7 +16,7 @@ - + @@ -27,7 +27,7 @@ 3. Apply some workload, for example from the testing directory of this repo:

    kubectl apply -f https://raw.githubusercontent.com/gefyrahq/gefyra/main/testing/workloads/hello.yaml

    Check out this workload running under: http://hello.127.0.0.1.nip.io:8080/

    Running Gefyra

    1. Set up Gefyra with
    gefyra up
    1. Run a local Docker image with Gefyra in order to make it part of the cluster.

      1. Build your Docker image with a local tag, for example from the testing directory: cd testing/images/ && docker build -f Dockerfile.local . -t pyserver
      2. Execute Gefyra's run command:
        gefyra run -i pyserver -N mypyserver -n default
      3. exec into the running container and look around. You will find the container to run within your Kubernetes cluster.
        docker exec -it mypyserver bash
        wget -O- hello-nginx
        will print out the website of the cluster service hello-nginx from within the cluster.
    2. Create a bridge in order to intercept the traffic to the cluster application with the one running locally:

    gefyra bridge -N mypyserver -n default --port 8000:80 --target deploy/hello-nginxdemo/hello-nginx

    Check out the locally running server comes up under: http://hello.127.0.0.1.nip.io:8080/

    1. List all running bridges:
    gefyra list --bridges
    1. Unbridge the local container and reset the cluster to its original state:
    gefyra unbridge -N mypybridge

    Check out the initial response from: http://hello.127.0.0.1.nip.io:8080/

    Cleaning up

    1. Remove Gefyra's components from the cluster with
    gefyra down
    10. Remove the locally running Kubernetes cluster with ```sh k3d cluster delete mycluster ```

    Provide us with your feedback

    Did everything work as expected? How was the experience of using Gefyra? We'd appreciate if you could take 2 minutes of your time to fill out our feedback form.

    - + \ No newline at end of file diff --git a/docs/1.x/getting-started/kind/index.html b/docs/1.x/getting-started/kind/index.html index 62ac4d2..4423dec 100644 --- a/docs/1.x/getting-started/kind/index.html +++ b/docs/1.x/getting-started/kind/index.html @@ -16,7 +16,7 @@ - + @@ -27,7 +27,7 @@ Create a file kind-config.yaml:

    kind: Cluster
    apiVersion: kind.x-k8s.io/v1alpha4
    nodes:
    - role: control-plane
    extraPortMappings:
    - containerPort: 31820
    hostPort: 31820
    protocol: udp

    Run:

    kind create cluster --config kind-config.yaml

    Running Gefyra

    1. Set up Gefyra with
    gefyra up
    1. Run a local Docker image with Gefyra in order to make it part of the cluster.

      1. Build your Docker image with a local tag, for example from the testing directory: cd testing/images/ && docker build -f Dockerfile.local . -t pyserver
      2. Execute Gefyra's run command:
        gefyra run -i pyserver -N mypyserver -n default
      3. exec into the running container and look around. You will find the container to run within your Kubernetes cluster.
        docker exec -it mypyserver bash
        wget -O- hello-nginx
        will print out the website of the cluster service hello-nginx from within the cluster.
    2. Create a bridge in order to intercept the traffic to the cluster application with the one running locally:

    gefyra bridge -N mypyserver -n default --port 8000:80 --target deploy/hello-nginxdemo/hello-nginx

    Check out the locally running server comes up under: http://hello.127.0.0.1.nip.io:8080/

    1. List all running bridges:
    gefyra list --bridges
    1. Unbridge the local container and reset the cluster to its original state:
    gefyra unbridge -N mypybridge

    Check out the initial response from: http://hello.127.0.0.1.nip.io:8080/

    Cleaning up

    1. Remove Gefyra's components from the cluster with
    gefyra down
    1. Remove the locally running Kubernetes cluster with kind delete cluster

    Provide us with your feedback

    Did everything work as expected? How was the experience of using Gefyra? We'd appreciate if you could take 2 minutes of your time to fill out our feedback form.

    - + \ No newline at end of file diff --git a/docs/1.x/getting-started/minikube/index.html b/docs/1.x/getting-started/minikube/index.html index b1ec546..ed53228 100644 --- a/docs/1.x/getting-started/minikube/index.html +++ b/docs/1.x/getting-started/minikube/index.html @@ -16,7 +16,7 @@ - + @@ -33,7 +33,7 @@ cd testing/images/ && docker build -f Dockerfile.local . -t pyserver
  • Execute Gefyra's run command:
  • gefyra run -i pyserver -N mypyserver -n default
    1. Exec into the running container and look around. You will find the container to run within your Kubernetes cluster.
    docker exec -it mypyserver bash
    wget -O- hello-nginx

    will print out the website of the cluster service hello-nginx from within the cluster. 3. Create a bridge in order to intercept the traffic to the cluster application with the one running locally:

    gefyra bridge -N mypyserver -n default --port 8000:80 --target deploy/hello-nginxdemo/hello-nginx

    Check out the locally running server comes up by refreshing the address from:

    minikube service hello-nginxdemo
    1. List all running bridges:
    gefyra list --bridges
    1. Unbridge the local container and reset the cluster to its original state:
    gefyra unbridge -N mypybridge

    Check out the initial response from:

    minikube service hello-nginxdemo

    Cleaning up

    Remove Gefyra's components from the cluster with

    gefyra down

    Provide us with your feedback

    Did everything work as expected? How was the experience of using Gefyra? We'd appreciate if you could take 2 minutes of your time to fill out our feedback form.

    - + \ No newline at end of file diff --git a/docs/1.x/getting-started/sys11/index.html b/docs/1.x/getting-started/sys11/index.html index 97e7de3..63b5a8f 100644 --- a/docs/1.x/getting-started/sys11/index.html +++ b/docs/1.x/getting-started/sys11/index.html @@ -16,7 +16,7 @@ - + @@ -28,7 +28,7 @@ cd testing/images/ && docker build -f Dockerfile.local . -t pyserver
  • Execute Gefyra's run command:
    gefyra run -i pyserver -N mypyserver -n default
  • Exec into the running container and look around. You will find the container to run within your Kubernetes cluster.
    docker exec -it mypyserver bashwget -O- hello-nginx will print out the website of the cluster service hello-nginx from within the cluster.
  • Create a bridge to intercept the traffic to the cluster application with the one running locally:
    gefyra bridge -N mypyserver -n default --port 80:8000 --target deploy/hello-nginxdemo/hello-nginx
  • List all running bridges:
    gefyra list --bridges
  • Unbridge the local container and reset the cluster to its original state: gefyra unbridge -N mypybridge
  • Cleaning up

    Remove Gefyra's components from the cluster with gefyra down

    Provide us with your feedback

    Did everything work as expected? How was the experience of using Gefyra? We'd appreciate if you could take 2 minutes of your time to fill out our feedback form.

    - + \ No newline at end of file diff --git a/docs/1.x/index.html b/docs/1.x/index.html index 271d2ed..d5df82b 100644 --- a/docs/1.x/index.html +++ b/docs/1.x/index.html @@ -16,7 +16,7 @@ - + @@ -30,7 +30,7 @@ check out the use cases and demos or the media section.

    Alternative to Telepresence

    Compared to Telepresence VPN to connect with the Kubernetes cluster. Telepresence provides namespace-scoped connectivity with the cluster via a virtual network interface, and tunnels over gRPC.

    Gefyra comes with Docker as baked-in dependency. With Telepresence, Docker is optional.

    Telepresence uses a sidecar pattern to inject the container(s) needed to perform selective intercepts (the original container will receive unintercepted traffic). Gefyra instead replaces the image of the intercepted container with the Gefyra carrier image, which then redirects traffic to the local container. Gefyra can therefore support a couple of important use-cases such as the sidecar pattern (see: this medium article).

    Anyway, if you feel you need other features that Telepresence provides and Gefyra misses, please give it a go. Gefyra was heavily inspired by Telepresence.

    Gefyra was designed to be fast and robust on an average developer machine and supports most platforms.

    - + \ No newline at end of file diff --git a/docs/1.x/installation/index.html b/docs/1.x/installation/index.html index 0963524..02a0485 100644 --- a/docs/1.x/installation/index.html +++ b/docs/1.x/installation/index.html @@ -16,7 +16,7 @@ - + @@ -30,7 +30,7 @@ on your local machine.

    Chocolatey will be available soon. If you can support this project with packaging and distributing for Windows please get in touch!

    Todo

    Docker Desktop Extension

    The Gefyra Docker Desktop Extension is available on the Docker Desktop extension marketplace However, you can also install it by running the following command:

    docker extension install gefyra/docker-desktop-extension:latest

    For more details see Docker Desktop Extension.

    Using Python Package Index

    You can install Gefyra with pip:

    pip install gefyra --upgrade

    https://pypi.org/project/gefyra/

    - + \ No newline at end of file diff --git a/docs/1.x/media/index.html b/docs/1.x/media/index.html index 910396e..a8c54d2 100644 --- a/docs/1.x/media/index.html +++ b/docs/1.x/media/index.html @@ -16,7 +16,7 @@ - + @@ -24,7 +24,7 @@
    Version: 1.x

    Media

    Videos, podcasts and other media about Gefyra.

    Conferences

    Local containers on board! Connect your local containers to K8s using Gefyra | Kubernetes Community Days Munich 2022, Munich

    Debugging a container with a sidecar using Gefyra | Cloud-native Rejects 2022, Valencia

    Debugging a container with a sidecar using Gefyra | Conf42 Cloud Native 2022

    Podcasts

    Accelerate And Simplify Cloud Native Development For Kubernetes Environments With Gefyra - Episode 359

    Other Presentations

    Gefyra Docker Desktop Extension Demo April 2023

    Gefyra Docker Desktop Extension Demo Feb 2023

    Gefyra Docker Desktop Extension Demo Jan 2023

    Development Sessions

    Blog

    - + \ No newline at end of file diff --git a/docs/1.x/run_vs_bridge/index.html b/docs/1.x/run_vs_bridge/index.html index b40b3e0..4df75d9 100644 --- a/docs/1.x/run_vs_bridge/index.html +++ b/docs/1.x/run_vs_bridge/index.html @@ -16,7 +16,7 @@ - + @@ -28,7 +28,7 @@ you connected it to. Multiple users can run multiple containers connected to the same cluster.

    Auth Service

    Bridge - builds on top of Run. In certain situation you want other services to connect to your local container. For this, your local container needs some kind of representation within the Kubernetes cluster it is connected to. With Bridge Gefyra patches a given workload within your Kubernetes cluster and reroutes all the incoming traffic to your local container. Multiple users cannot bridge the same workload.

    Auth Service - + \ No newline at end of file diff --git a/docs/1.x/tech/architecture/index.html b/docs/1.x/tech/architecture/index.html index 4674155..03107b6 100644 --- a/docs/1.x/tech/architecture/index.html +++ b/docs/1.x/tech/architecture/index.html @@ -16,7 +16,7 @@ - + @@ -84,7 +84,7 @@ Developers now can run local integration tests with new software while having access to all interdependent services.
    Once the development job is done, Gefyra properly removes everything, resets Pod <C> to its original configuration, and tears the local environment down (just like nothing ever happened).

    - + \ No newline at end of file diff --git a/docs/1.x/tech/index.html b/docs/1.x/tech/index.html index 7e03a02..bcc3eda 100644 --- a/docs/1.x/tech/index.html +++ b/docs/1.x/tech/index.html @@ -16,7 +16,7 @@ - + @@ -24,7 +24,7 @@ - + \ No newline at end of file diff --git a/docs/1.x/tech/what/index.html b/docs/1.x/tech/what/index.html index 663997a..9717ab1 100644 --- a/docs/1.x/tech/what/index.html +++ b/docs/1.x/tech/what/index.html @@ -16,7 +16,7 @@ - + @@ -38,7 +38,7 @@ in order to allow port 31820 for UDP traffic. It's simple for most Cloud-providers ("Hyperscaler") and doable for custom installations, too.
  • Kubernetes-probes can be faked by Gefyra's Pod component ("Carrier") in order to keep Kubernetes from removing bridged Pods. However, this is currently only supported for httpGet probes. Otherwise, you need to turn off probes during development.
  • You will experience issues if you want to bridge containers in Pods which specify a specific command (other than common shells).
  • This project is in a quite early stage. I assume there are still a few bugs around.
  • Why "Gefyra"?

    "Gefyra" is the Greek word for "Bridge" and fits nicely with kubernetes' nautical theme.

    - + \ No newline at end of file diff --git a/docs/1.x/usecases/golang/index.html b/docs/1.x/usecases/golang/index.html index 7d8c879..282a546 100644 --- a/docs/1.x/usecases/golang/index.html +++ b/docs/1.x/usecases/golang/index.html @@ -16,7 +16,7 @@ - + @@ -33,7 +33,7 @@ Visit http://gefyra-golang.127.0.0.1.nip.io:8080 in your browser and try changing the contents of the io.WriteString function. Since we mounted our code into the container during gefyra run, air will detect the changes and rebuild/restart our application. Refresh your browser and check out the results!

    - + \ No newline at end of file diff --git a/docs/1.x/usecases/index.html b/docs/1.x/usecases/index.html index 2de4bd0..5929746 100644 --- a/docs/1.x/usecases/index.html +++ b/docs/1.x/usecases/index.html @@ -16,7 +16,7 @@ - + @@ -24,7 +24,7 @@ - + \ No newline at end of file diff --git a/docs/1.x/usecases/oauth2-demo/index.html b/docs/1.x/usecases/oauth2-demo/index.html index 7e23ba8..475e31c 100644 --- a/docs/1.x/usecases/oauth2-demo/index.html +++ b/docs/1.x/usecases/oauth2-demo/index.html @@ -16,7 +16,7 @@ - + @@ -80,7 +80,7 @@ Gefyra is part of Unikube's development workflow.

    If you are developing django applications, be sure to check out Django-Hurricane, a Kubernetes-native stack specifically created for django and Pycloak, a package that's makes it super easy to integrate OpenID Connect/OAuth2 workflows in django.

    - + \ No newline at end of file diff --git a/docs/1.x/usecases/remote-gke/index.html b/docs/1.x/usecases/remote-gke/index.html index faea814..8672760 100644 --- a/docs/1.x/usecases/remote-gke/index.html +++ b/docs/1.x/usecases/remote-gke/index.html @@ -16,7 +16,7 @@ - + @@ -52,7 +52,7 @@ source directory inside the container for hot-reloading using -v and specify the command to be executed on startup.

    Thats it. To get the IP of the container, run

    gefyra list --containers

    Now you can open your browser at <ip>:8000 and get the same 404-Error. You can watch the logs using docker logs -f myspacecraft.

    The reason why we get a 404 not found is simply a missing route. We should add one in src/configuration/urls.py:

     urlpatterns = [
    # django-admin:
    + path("", csrf_exempt(GraphQLView.as_view(graphiql=True))),
    path("admin/doc/", include(admindocs_urls)), # noqa: DJ05
    path("admin/", admin.site.urls),
    path("graphql/", csrf_exempt(GraphQLView.as_view(graphiql=True))),

    If you now reload your browser tab, you should see a graphql input field!

    - + \ No newline at end of file diff --git a/docs/1.x/usecases/ubuntu-in-namespace/index.html b/docs/1.x/usecases/ubuntu-in-namespace/index.html index dce3c6c..3d257dc 100644 --- a/docs/1.x/usecases/ubuntu-in-namespace/index.html +++ b/docs/1.x/usecases/ubuntu-in-namespace/index.html @@ -16,7 +16,7 @@ - + @@ -41,7 +41,7 @@ docker kill myubuntu. That's it.

    Remove the Development Infrastructure

    First run gefyra down to uninstall Gefyra's components. If you have initially created the development infrastructure using Getdeck you can now run:

    $> deck remove --cluster https://github.com/Blueshoe/buzzword-charts.git
    [INFO] Deleting the k3d cluster with name another-cluster

    If you created the infrastructure yourself, you probably already know how to get rid of everything yourself ;-)

    Additional Notes

    If you want maximum convenience for your developers and a supported team oriented workflow, we recommend you check out Unikube. Gefyra is part of Unikube's development workflow.

    - + \ No newline at end of file diff --git a/docs/cli/index.html b/docs/cli/index.html index ae344af..a2b84cb 100644 --- a/docs/cli/index.html +++ b/docs/cli/index.html @@ -16,7 +16,7 @@ - + @@ -41,7 +41,7 @@ No arguments available.

    version

    Display the current version and exit.

    Example:

    gefyra version

    Arguments:
    No arguments available.

    status

    Display the status of Gefyra on the local machine and the cluster.

    Example:

    gefyra status

    Arguments:
    No arguments available.

    telemetry

    Gefyra anonymously tracks its usage by collecting telemetry data. Telemetry is enabled by default.

    Example:

    gefyra telemetry --on

    Arguments:

    ArgumentDescription
    --offTurn off telemetry
    --onTurn on telemetry
    - + \ No newline at end of file diff --git a/docs/docker-extension/index.html b/docs/docker-extension/index.html index 4101ba5..1dec5b9 100644 --- a/docs/docker-extension/index.html +++ b/docs/docker-extension/index.html @@ -16,7 +16,7 @@ - + @@ -32,7 +32,7 @@ As soon as you're done hit run!

    Docker Desktop Extension Load Gefyra ensures that its cluster components are in the correct state and starts the container.

    Once the container is running Gefyra will show you the logs of the container.

    10 minute demo

    Gefyra Docker Desktop Extension Run Demo Video

    Gefyra Docker Desktop Extension Bridge Demo Video

    Please provide us with your feedback

    Did everything work as expected? How was the experience of using Gefyra? We'd appreciate if you could take 2 minutes of your time to fill out our feedback form.

    - + \ No newline at end of file diff --git a/docs/getting-started-with-gefyra/index.html b/docs/getting-started-with-gefyra/index.html index ff0602b..af94f3b 100644 --- a/docs/getting-started-with-gefyra/index.html +++ b/docs/getting-started-with-gefyra/index.html @@ -16,7 +16,7 @@ - + @@ -32,7 +32,7 @@ if this switch is missing when working with Minikube.

    2. Run a local Docker container with Gefyra in order to connect it with the cluster.

    2.1 Build a simple Docker image with a local tag. Save the following two files in a directory on your disk.

    File ./Dockerfile

    FROM ubuntu
    # run a server on port 8000
    RUN apt update && apt install -y iproute2 iputils-ping python3 traceroute wget curl
    COPY local.py local.py
    CMD python3 local.py

    File ./local.py

    import http.server
    import signal
    import socket
    import socketserver
    import sys
    from datetime import datetime

    if sys.argv[1:]:
    port = int(sys.argv[1])
    else:
    port = 8000

    class MyHttpRequestHandler(http.server.SimpleHTTPRequestHandler):
    def do_GET(self):
    self.send_response(200)
    self.send_header("Content-type", "text/html")
    self.end_headers()
    hostname = socket.gethostname()
    now = datetime.utcnow()
    self.wfile.write(
    bytes(
    f"<html><body><h1>Hello from Gefyra. It is {now} on"
    f" {hostname}.</h1></body></html>".encode("utf-8")
    )
    )

    my_handler = MyHttpRequestHandler
    server = socketserver.ThreadingTCPServer(("", port), my_handler)

    def signal_handler(signal, frame):
    try:
    if server:
    server.server_close()
    finally:
    sys.exit(0)

    signal.signal(signal.SIGINT, signal_handler)
    try:
    while True:
    sys.stdout.flush()
    server.serve_forever()
    except KeyboardInterrupt:
    pass

    server.server_close()
    2.2 Build it by running docker build -f Dockerfile . -t pyserver in your directory.
    2.3 Execute Gefyra's run command:
    gefyra run -d -i pyserver -N mypyserver -n default

    Important: gefyra run is just a wrapper for docker run (with additional flags), yet it also applies Gefyra's networking configuration to connect the container with Kubernetes. Check out the docs for gefyra run

    3. Exec into the running container and look around. You will find the container to run within your Kubernetes cluster.

    docker exec -it mypyserver bash
    wget -O- hello-nginx

    will print out the website of the cluster service hello-nginx from within the cluster. 🚀

    4. Create a bridge to redirect the traffic from the cluster application to the one running locally:

    gefyra bridge -N mypyserver -n default --ports 80:8000 --target deploy/hello-nginxdemo/hello-nginx

    Check out the locally running server serving the cluster by refreshing the address from:

    minikube service hello-nginxdemo

    It shows you a different message: Hello from Gefyra. It is .... Yes, that is really coming from your local container! 😎

    5. List all running bridges:

    You can list all currently active bridges with:

    gefyra list --bridges

    You will find all local containers that are currently linked into the cluster serving requests.

    6. Unbridge the local container and reset the cluster to its original state:

    gefyra unbridge --all

    Check out the original response from:

    minikube service hello-nginxdemo

    The cluster is now reset to its inital state again.

    Cleaning up

    Remove Gefyra's components from the cluster and your local Docker host with:

    gefyra down

    Deleting the Minikube cluster

    minikube delete

    Please provide us with your feedback

    Did everything work as expected? How was the experience of using Gefyra? We'd appreciate if you could take 2 minutes of your time to fill out our feedback form.

    - + \ No newline at end of file diff --git a/docs/index.html b/docs/index.html index 9b76c62..3119e1d 100644 --- a/docs/index.html +++ b/docs/index.html @@ -16,7 +16,7 @@ - + @@ -28,7 +28,7 @@ serve the requests to that Pod from your local container instances. That makes it very convenient to test changes in a realistic production-close environment before pushing the code to CI/CD.

    Gefyra bridge action

    Quick installation

    curl -sSL https://raw.githubusercontent.com/gefyrahq/gefyra/main/install.sh | sh -

    Looking for Homebrew or Windows installation? Checkout the installation guide.

    Use Cases and Demos

    If you are interested in more sophisticated use cases or want to develop modern Kubernetes-based architectures, check out the use cases and demos or the media section.

    - + \ No newline at end of file diff --git a/docs/installation/index.html b/docs/installation/index.html index adc8a3f..c9c788e 100644 --- a/docs/installation/index.html +++ b/docs/installation/index.html @@ -16,7 +16,7 @@ - + @@ -30,7 +30,7 @@ on your local machine.

    Chocolatey will be available soon. If you can support this project with packaging and distributing for Windows please get in touch!

    Todo

    Docker Desktop Extension

    The Gefyra Docker Desktop Extension is available on the Docker Desktop extension marketplace However, you can also install it by running the following command:

    docker extension install gefyra/docker-desktop-extension:latest

    For more details see Docker Desktop Extension.

    Using Python Package Index

    You can install Gefyra with pip:

    pip install gefyra --upgrade

    https://pypi.org/project/gefyra/

    - + \ No newline at end of file diff --git a/docs/local-environments/colima/index.html b/docs/local-environments/colima/index.html index 4695a2a..2f31c07 100644 --- a/docs/local-environments/colima/index.html +++ b/docs/local-environments/colima/index.html @@ -16,7 +16,7 @@ - + @@ -27,7 +27,7 @@ configuration to connect the container with Kubernetes. Check out the docs for gefyra run

    3. Exec into the running container and look around. You will find the container to run within your Kubernetes cluster.

    docker exec -it mypyserver bash
    wget -O- hello-nginx

    will print out the website of the cluster service hello-nginx from within the cluster. 🚀

    4. Create a bridge to redirect the traffic from the cluster application to the one running locally:

    gefyra bridge -N mypyserver -n default --ports 80:8000 --target deploy/hello-nginxdemo/hello-nginx

    Check out the locally running server serving the cluster by refreshing the address from the service in Kubernetes.
    It shows you a different message: Hello from Gefyra. It is .... Yes, that is really coming from your local container! 😎

    5. List all running bridges:

    You can list all currently active bridges with:

    gefyra list --bridges

    You will find all local containers that are currently linked into the cluster serving requests.

    6. Unbridge the local container and reset the cluster to its original state:

    gefyra unbridge --all

    Check out the original response from from the service. The cluster is now reset to its inital state again.

    Cleaning up

    Remove Gefyra's components from the cluster and your local Docker host with:

    gefyra down
    1. Remove the locally running Kubernetes cluster with
    colima delete

    Please provide us with your feedback

    Did everything work as expected? How was the experience of using Gefyra? We'd appreciate if you could take 2 minutes of your time to fill out our feedback form.

    - + \ No newline at end of file diff --git a/docs/local-environments/docker_desktop_osx/index.html b/docs/local-environments/docker_desktop_osx/index.html index 3ac01d5..1c2b19a 100644 --- a/docs/local-environments/docker_desktop_osx/index.html +++ b/docs/local-environments/docker_desktop_osx/index.html @@ -16,7 +16,7 @@ - + @@ -31,7 +31,7 @@ ingress controller like this:
    kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.2.1/deploy/static/provider/cloud/deploy.yaml
    1. Now patch the nginx ingress controller service to make port 8080 available:
    kubectl patch svc -n ingress-nginx ingress-nginx-controller -p '{"spec": {"ports": [{"appProtocol": "http", "name": "http", "port": 8080, "protocol": "TCP", "targetPort": "http"}]}}' --type merge
    1. Apply some workload, for example from the testing directory of this repo:
    kubectl apply -f https://raw.githubusercontent.com/gefyrahq/gefyra/main/testing/workloads/hello_dd.yaml

    Check out this workload running under: http://hello.127.0.0.1.nip.io:8080/

    1. Set up Gefyra with the following command:

    For Docker Desktop <4.16.x:

    gefyra up

    For Docker Desktop >=4.16.x:

    gefyra up --host=kubernetes.docker.internal

    Running Gefyra

    1. Run a local Docker image with Gefyra in order to make it part of the cluster.

      1. Build your Docker image with a local tag, for example from the testing directory: cd testing/images/ && docker build -f Dockerfile.local . -t pyserver
      2. Execute Gefyra's run command:
        gefyra run -i pyserver -N mypyserver -n default
      3. exec into the running container and look around. You will find the container to run within your Kubernetes cluster.
        docker exec -it mypyserver bash
        wget -O- hello-nginx
        will print out the website of the cluster service hello-nginx from within the cluster.
    2. Create a bridge in order to intercept the traffic to the cluster application with the one running locally:

    gefyra bridge -N mypyserver -n default --port 8000:80 --target deploy/hello-nginxdemo/hello-nginx

    Check out the locally running server comes up under: http://hello.127.0.0.1.nip.io:8080/

    1. List all running bridges:
    gefyra list --bridges
    1. Unbridge the local container and reset the cluster to its original state:
    gefyra unbridge -N mypybridge

    Check out the initial response from: http://hello.127.0.0.1.nip.io:8080/

    Cleaning up

    1. Remove Gefyra's components from the cluster with
    gefyra down

    Please provide us with your feedback

    Did everything work as expected? How was the experience of using Gefyra? We'd appreciate if you could take 2 minutes of your time to fill out our feedback form.

    - + \ No newline at end of file diff --git a/docs/local-environments/index.html b/docs/local-environments/index.html index bec488a..520c1da 100644 --- a/docs/local-environments/index.html +++ b/docs/local-environments/index.html @@ -16,7 +16,7 @@ - + @@ -27,7 +27,7 @@ guides are for a single user on a local machine.

    Workflow for single users

    This workflow with Gefyra is an shortcut for local connections: gefyra up takes care of creating a default Gefyra Client, generating the connection configuration and setting up the connection to the cluster.

    Local Kubernetes providers

    Follow along these guides to connect Gefyra with your preferred Kubernetes provider.

    Hey! We would be very happy to know about your Kubernetes development setup. If you can't find your distribuition in this list, please request a guide by creating a GitHub issue using this template.
    It's that simple and very helpful.

    - + \ No newline at end of file diff --git a/docs/local-environments/k3d/index.html b/docs/local-environments/k3d/index.html index d40fe2f..b2c30b0 100644 --- a/docs/local-environments/k3d/index.html +++ b/docs/local-environments/k3d/index.html @@ -16,7 +16,7 @@ - + @@ -27,7 +27,7 @@ configuration to connect the container with Kubernetes. Check out the docs for gefyra run

    3. Exec into the running container and look around. You will find the container to run within your Kubernetes cluster.

    docker exec -it mypyserver bash
    wget -O- hello-nginx

    will print out the website of the cluster service hello-nginx from within the cluster. 🚀

    4. Create a bridge to redirect the traffic from the cluster application to the one running locally:

    gefyra bridge -N mypyserver -n default --ports 80:8000 --target deploy/hello-nginxdemo/hello-nginx

    Check out the locally running server serving the cluster by refreshing the address from the service in Kubernetes.
    It shows you a different message: Hello from Gefyra. It is .... Yes, that is really coming from your local container! 😎

    5. List all running bridges:

    You can list all currently active bridges with:

    gefyra list --bridges

    You will find all local containers that are currently linked into the cluster serving requests.

    6. Unbridge the local container and reset the cluster to its original state:

    gefyra unbridge --all

    Check out the original response from from the service. The cluster is now reset to its inital state again.

    Cleaning up

    Remove Gefyra's components from the cluster and your local Docker host with:

    gefyra down

    Deleting the locally running k3d Kubernetes cluster with

    k3d cluster delete mycluster

    Please provide us with your feedback

    Did everything work as expected? How was the experience of using Gefyra? We'd appreciate if you could take 2 minutes of your time to fill out our feedback form.

    - + \ No newline at end of file diff --git a/docs/local-environments/kind/index.html b/docs/local-environments/kind/index.html index 32979fa..caa88f1 100644 --- a/docs/local-environments/kind/index.html +++ b/docs/local-environments/kind/index.html @@ -16,7 +16,7 @@ - + @@ -27,7 +27,7 @@ Create a file kind-config.yaml:

    kind: Cluster
    apiVersion: kind.x-k8s.io/v1alpha4
    nodes:
    - role: control-plane
    extraPortMappings:
    - containerPort: 31820
    hostPort: 31820
    protocol: udp

    Run:

    kind create cluster --config kind-config.yaml

    Running Gefyra

    1. Set up Gefyra with
    gefyra up
    1. Run a local Docker image with Gefyra in order to make it part of the cluster.

      1. Build your Docker image with a local tag, for example from the testing directory: cd testing/images/ && docker build -f Dockerfile.local . -t pyserver
      2. Execute Gefyra's run command:
        gefyra run -i pyserver -N mypyserver -n default
      3. exec into the running container and look around. You will find the container to run within your Kubernetes cluster.
        docker exec -it mypyserver bash
        wget -O- hello-nginx
        will print out the website of the cluster service hello-nginx from within the cluster.
    2. Create a bridge in order to intercept the traffic to the cluster application with the one running locally:

    gefyra bridge -N mypyserver -n default --port 8000:80 --target deploy/hello-nginxdemo/hello-nginx

    Check out the locally running server comes up under: http://hello.127.0.0.1.nip.io:8080/

    1. List all running bridges:
    gefyra list --bridges
    1. Unbridge the local container and reset the cluster to its original state:
    gefyra unbridge -N mypybridge

    Check out the initial response from: http://hello.127.0.0.1.nip.io:8080/

    Cleaning up

    1. Remove Gefyra's components from the cluster with
    gefyra down
    1. Remove the locally running Kubernetes cluster with kind delete cluster

    Please provide us with your feedback

    Did everything work as expected? How was the experience of using Gefyra? We'd appreciate if you could take 2 minutes of your time to fill out our feedback form.

    - + \ No newline at end of file diff --git a/docs/local-environments/minikube/index.html b/docs/local-environments/minikube/index.html index c07ec26..05d7ff4 100644 --- a/docs/local-environments/minikube/index.html +++ b/docs/local-environments/minikube/index.html @@ -16,7 +16,7 @@ - + @@ -25,7 +25,7 @@
    Version: 2.0.0

    Getting started with Gefyra and Minikube

    Please refer to the general getting started guide for Gefyra](/docs/getting-started-with-gefyra) as this is about Minikube, too.

    Please provide us with your feedback

    Did everything work as expected? How was the experience of using Gefyra? We'd appreciate if you could take 2 minutes of your time to fill out our feedback form.

    - + \ No newline at end of file diff --git a/docs/run_vs_bridge/index.html b/docs/run_vs_bridge/index.html index b08b489..49a191c 100644 --- a/docs/run_vs_bridge/index.html +++ b/docs/run_vs_bridge/index.html @@ -16,7 +16,7 @@ - + @@ -28,7 +28,7 @@ you connected it to. Multiple users can run multiple containers connected to the same cluster.

    Auth Service

    Bridge Operation

    Bridge - builds on top of Run. In certain situation you want other services to connect to your local container. For this, your local container needs some kind of representation within the Kubernetes cluster it is connected to. With Bridge Gefyra patches a given workload within your Kubernetes cluster and reroutes all the incoming traffic to your local container. Multiple users cannot bridge the same workload.

    Auth Service
    - + \ No newline at end of file diff --git a/docs/shared-environments/clients/index.html b/docs/shared-environments/clients/index.html index 53f0fd8..3cf0e36 100644 --- a/docs/shared-environments/clients/index.html +++ b/docs/shared-environments/clients/index.html @@ -16,7 +16,7 @@ - + @@ -24,17 +24,17 @@
    Version: 2.0.0

    Working With Gefyra Clients

    TLDR;

    Gefyra Clients provide a way to grant multiple clients (i.e. users, robots, pipelines, etc.) limited access to a Kubernetes cluster in order to use Gefyra's capabilities. They are managed with gefyra clients [COMMAND].

    Gefyra introduces the concept of Gefyra Clients. These are objects to manage and distribute access to the cluster.

    Shared Cluster Access

    Each created client object get a dedicated Kubernetes Service Account attached that is being used by any Gefyra client during its interaction with the cluster. The corresponding client file, which contains the connection parameters for the Service Account can be retrieved from the cluster by the administrator with Gefyra's CLI.

    This client file can be then distributed to anyone which needs to connect, run or bridge workloads in the given cluster. -The permissions of the Kubernetes service account are limited, following the principle of the least privilege. Hence, Gefyra clients can only operate in the cluster with the well-defined set Gefyra's actions.

    This flow gives a brief overview of Gefyra's workflow for teams:

    Important: Although clients may be shared by multiple machines, it is neither recommended not will it work simultaneously. -Once a client connects to a cluster, it agrees with Gefyra's Operator on a dedicated IP-range that no other client can use at the same time. Clients may connect and disconnect at any time. When disconnecting from the cluster, clients release their VPN peer (and thus their IP-range) association.

    Prerequisites

    1. Gefyra is available (at least in version 2.0.0)
    2. Gefyra is installed to a shared Kubernetes cluster
    3. Admin access to the shared cluster

    Creating a Gefyra Client

    You can create as many clients as you need in a cluster. Every client will have it's very own VPN connection to the cluster.
    -An admin manages clients via Gefyra's gefyra client command group in the CLI. Gefyra operates with the currently active cluster context on the machine it is running on.

    Remark: Check your active cluster context with kubectl config current-context.

    > gefyra client

    Manage clients for a Gefyra installation

    Commands:
    config (write) Get a Gefyra connection config for a client
    create Create a new Gefyra client
    delete (rm,remove) Mark a Gefyra client for deletion
    inspect (show,get) Discribe a Gefyra client
    list (ls) List all Gefyra clients

    You can create one client object with:

    > gefyra clients create

    1 client(s) created successfully

    That command created a randomly named client in your cluster. You can find it with:

    > gefyra clients ls
    ID STATE CREATED
    20d50da476524eaf8dd511deed55fc63 GefyraClientState.REQUESTED Creating...

    Once the client is ready, you will find the following output:

    > gefyra clients ls
    ID STATE CREATED
    20d50da476524eaf8dd511deed55fc63 GefyraClientState.WAITING 2023-10-06T15:21:19.771717Z

    The client is now in the waiting state and ready for connection.

    To manage human-readable clients, you can set the client name with:

    gefyra clients create --client-id my-fancy-client

    or create many clients at once using:

    gefyra clients create -n 10

    This will create a set of 10 clients in the cluster.

    Retrieving a Client File

    Gefyra clients require a client file to connect to this cluster. The admin is responsible to fetch these client files and +The permissions of the Kubernetes service account are limited, following the principle of the least privilege. Hence, Gefyra clients can only operate in the cluster with the well-defined set of Gefyra's actions.

    This flow gives a brief overview of Gefyra's workflow for teams:

    Don't share client connections

    Although clients may be used by multiple machines, it is neither recommended not will it work simultaneously. +Once a client connects to a cluster, it agrees with Gefyra's Operator on a dedicated IP-range that no other client can use at the same time. Clients may connect and disconnect at any time. When disconnecting from the cluster, clients release their VPN peer (and thus their IP-range) association.

    Prerequisites
    1. Gefyra is available (at least in version 2.0.0)
    2. Gefyra is installed to a shared Kubernetes cluster
    3. Admin access to the shared cluster

    Creating a Gefyra Client

    You can create as many clients as you need in a cluster. Every client will have it's very own VPN connection to the cluster.
    +An admin manages clients via Gefyra's gefyra client command group in the CLI. Gefyra operates with the currently active cluster context on the machine it is running on.

    Kubernetes context

    Check your active cluster context with kubectl config current-context.

    > gefyra client

    Manage clients for a Gefyra installation

    Commands:
    config (write) Get a Gefyra connection config for a client
    create Create a new Gefyra client
    delete (rm,remove) Mark a Gefyra client for deletion
    inspect (show,get) Discribe a Gefyra client
    list (ls) List all Gefyra clients

    You can create one client object with:

    > gefyra clients create

    1 client(s) created successfully

    That command created a randomly named client in your cluster. You can find it with:

    > gefyra clients ls
    ID STATE CREATED
    20d50da476524eaf8dd511deed55fc63 GefyraClientState.REQUESTED Creating...

    Once the client is ready, you will find the following output:

    > gefyra clients ls
    ID STATE CREATED
    20d50da476524eaf8dd511deed55fc63 GefyraClientState.WAITING 2023-10-06T15:21:19.771717Z

    The client is now in the waiting state and ready for connection.

    To manage human-readable clients, you can set the client name with:

    gefyra clients create --client-id my-fancy-client

    or create many clients at once using:

    gefyra clients create -n 10

    This will create a set of 10 clients in the cluster.

    Retrieving a Client File

    Gefyra clients require a client file to connect to this cluster. The admin is responsible to fetch these client files and distribute them to other machines, developers, etc.

    A Default Client File

    The following command prints the client file of the selected client to the console:

    > gefyra clients config 20d50da476524eaf8dd511deed55fc63

    {"client_id": "20d50da476524eaf8dd511deed55fc63", "kubernetes_server": "https://<redacted>", "provider": "stowaway", "token": "<redacted>", "namespace": "<redacted>", "ca_crt": "<redacted>", "gefyra_server": "<redacted>:31820"}

    As you can see, the client file is JSON-structured and contains a lot of secret information. Especially the access token of the Kubernetes service account that is associated with this Gefyra client, but also the other connection -parameters are highly sensible.

    Important: Please handle the client files with care as they contain confidential information. Leaking these files may -allow unidentified individuals access to your Gefyra cluster.

    You can either pipe that output to a file on your local machine:

    gefyra clients config 20d50da476524eaf8dd511deed55fc63 > 20d50da476524eaf8dd511deed55fc63.json

    or use the output flag

    gefyra clients config 20d50da476524eaf8dd511deed55fc63 -o 20d50da476524eaf8dd511deed55fc63.json

    in your current working directory.

    Providing Custom Connection Data

    Important: In this process, Gefyra tries to determine as many connection parameters as possible automatically. However, -if there are network-related customizations to made for your client, please provide them at this point.

    If you need to specify the connection endpoint for Kubernetes differently, please use the --kubernetes-api option, e.g.

    gefyra clients config 20d50da476524eaf8dd511deed55fc63 -o 20d50da476524eaf8dd511deed55fc63.json --kubernetes-api "https://k8s.blueshoe.io"

    If you need to specify Gefyra's VPN connection endpoint, please use the --host and/or --port option, e.g.

    gefyra clients config 20d50da476524eaf8dd511deed55fc63 --host 192.169.0.1

    This data will be written into the client file so that your clients can connect to the cluster using these parameters. If you +parameters are highly sensible.

    Keep client files safe

    Please handle the client files with care as they contain confidential information. Leaking these files may +allow unidentified individuals access to your Gefyra cluster.

    You can either pipe that output to a file on your local machine:

    gefyra clients config 20d50da476524eaf8dd511deed55fc63 > 20d50da476524eaf8dd511deed55fc63.json

    or use the output flag

    gefyra clients config 20d50da476524eaf8dd511deed55fc63 -o 20d50da476524eaf8dd511deed55fc63.json

    in your current working directory.

    Providing Custom Connection Data

    Custom networking

    In this process, Gefyra tries to determine as many connection parameters as possible automatically. However, +if there are network-related customizations to made for your client, please provide them at this point.

    If you need to specify the connection endpoint for Kubernetes differently, please use the --kubernetes-api option, e.g.

    gefyra clients config 20d50da476524eaf8dd511deed55fc63 --kubernetes-api "https://k8s.blueshoe.io"

    If you need to specify Gefyra's VPN connection endpoint, please use the --host and/or --port option, e.g.

    gefyra clients config 20d50da476524eaf8dd511deed55fc63 --host 192.169.0.1

    This data will be written into the client file so that your clients can connect to the cluster using these parameters. If you fail to provide correct data to your clients, they might be unable to connect to the cluster.

    Distributing the Client File

    This client file is all a Gefyra client needs in order to establish a connection. Of course, you are free to distribute these files any way you want, but please keep in mind the security implications.

    Deleting a Gefyra Client

    You can delete a Gefyra client in every stage of its lifecycle. This will disconnect the client (forcefully) and render its -client file invalid to that the owner of the file will no longer be able to connect to the cluster.

    > gefyra clients delete 20d50da476524eaf8dd511deed55fc63
    Client 20d50da476524eaf8dd511deed55fc63 marked for deletion

    When you delete a Gefyra client, its credentials are also irretrievably deleted.

    - +client file invalid, thus the owner of the file will no longer be able to connect to the cluster.

    > gefyra clients delete 20d50da476524eaf8dd511deed55fc63
    Client 20d50da476524eaf8dd511deed55fc63 marked for deletion

    When you delete a Gefyra client, its credentials are also irretrievably deleted.

    + \ No newline at end of file diff --git a/docs/shared-environments/connecting/index.html b/docs/shared-environments/connecting/index.html index 8d69147..1459bf9 100644 --- a/docs/shared-environments/connecting/index.html +++ b/docs/shared-environments/connecting/index.html @@ -16,7 +16,7 @@ - + @@ -24,8 +24,19 @@
    - +just run gefyra connections connect -f <file>.

    Connecting to a Gefyra-enabled Kubernetes cluster is the process of any Gefyra client to establish a networking connection based on Wireguard VPN to a cluster. It is a multistep process that involves the dynamic creation of connection credentials and IP-range negotiation +between cluster and client. The network connection is persistent for the session, rock-solid and blazingly fast.

    Prerequisites
    1. Gefyra is available (at least in version 2.0.0)
    2. A running Docker host on the machine that connects
    3. A Gefyra client file

    Managing Connections

    Client connections to a Gefyra cluster are managed with the gefyra connections command group.
    +The connection itself consists of a file, that is located in a local user directory, and usually a +Docker container that acts as a VPN endpoint on a local machine.

    Connect

    Gefyra client file required

    You can only connect to a Gefyra cluster with a client file. +If you don't have such a client file, either set up Gefyra in a Kubernetes cluster and create yourself +a Gefyra client, or find the responsible person and ask for access.

    Establishing a connection (for the first time) to Gefyra works like this:

    > gefyra connections connect -f myfancyclient.json

    Creating the cluster connection 'default' | ▶▶▶▶▶▶▶ | / 0 in 28s

    Connection established with connection name 'default'. Run 'gefyra connections list' to see all connections.

    This example assumes, there is a client that provides the client file myfancyclient.json. A couple of things happened during this process:

    1. Gefyra fetched the ad-hoc VPN credentials for this connection
    2. A container for the Gefyra connection with name default has been started
    3. A dedicated Docker network has been created
    4. The connection was successfully checked

    If you check your Docker host, you will find a container named gefyra-cargo-default running. That's the gateway into the cluster.

    Default connection

    Since we didn't specify a connection name and there was no default connection available before, creating it was successful. However, there +is only one default connection on a client machine. Additional connections must be assigned a name.

    Once you have a stopped connection, you don't need the client file anymore to connect. Just run the following with the default connection:

    > gefyra connections connect

    The Gefyra connection will be back up in no time. Of course, if you do have multiple connections, you have to specify the connection name with the +--connection-name option.

    Client file superseded

    After you successfully connected a machine with a Gefyra cluster, the client file is typically superseded at that point. Gefyra stores the +credentials from the file elsewhere, so a user doesn't have to handle the file. However, if you remove your connection and want to reconnect +to the cluster (assuming the Gefyra client is still the same) you may connect to the cluster with that file again. Yet, you can also request a +new one, which is safer than having a client file dangling.

    Listing Connections

    To see all Gefyra connections on a local machine, please run the following:

    > gefyra connections list
    NAME VERSION CREATED STATUS
    default 2.0.0 2023-10-10T18:36:15.519969679Z running

    You will find the status of all of your connections here. It can be running, stopped or error.

    Disconnect

    To actively disconnect from the cluster, you run this command:

    gefyra connections stop

    This assumes you have a default connection currently running. If not, you have to provide a valid connection name with the --connection-name option.

    You will find this connection to be stopped from the client's side. However, if you want to reconnect to the cluster, you can now run gefyra connections connect again. The connection process will be superfast this time.

    Deleting a connection

    If you want to delete a connection, and thus release the Gefyra client in the cluster, you can run gefyra connections remove. If you want to reconnect +later, you will need a client file again.

    Connection Names

    Simultaneous Connections

    + \ No newline at end of file diff --git a/docs/shared-environments/index.html b/docs/shared-environments/index.html index e0f218d..2746131 100644 --- a/docs/shared-environments/index.html +++ b/docs/shared-environments/index.html @@ -16,7 +16,7 @@ - + @@ -24,7 +24,7 @@ - + \ No newline at end of file diff --git a/docs/shared-environments/installation/index.html b/docs/shared-environments/installation/index.html index 9ef314b..3098bf3 100644 --- a/docs/shared-environments/installation/index.html +++ b/docs/shared-environments/installation/index.html @@ -16,7 +16,7 @@ - + @@ -24,18 +24,17 @@
    Version: 2.0.0

    Gefyra (Remote) Cluster Installation

    Installing Gefyra to a remote cluster is usually slightly different to a local setup. This is because the networking aspect -differs considerably between a local cluster, that might be created with overlay networks and port-forwarding, and remote clusters with cloud-specific routing components. Starting with Gefyra 2, you get good control of the cluster-side components.

    Prerequisites

    Gefyra is available (at least in version 2.0.0)

    The Installation

    There are a couple of options for the installation procedure. Gefyra's executable ships with all required Kubernetes configs +differs considerably between a local cluster, that might be created with overlay networks and port-forwarding, and remote clusters with cloud-specific routing components. Starting with Gefyra 2, you get good control of the cluster-side components.

    Prerequisites

    Gefyra is available (at least in version 2.0.0)

    The Installation

    There are a couple of options for the installation procedure. Gefyra's executable ships with all required Kubernetes configs for that specific version.

    To introspect what is going to be installed into your cluster, just run gefyra install. This command generates a list of Kubernetes objects that can either be stored for manual modification, or directly applied to the cluster.

    > gefyra install

    apiVersion: v1
    kind: Namespace
    metadata:
    name: gefyra

    ---
    apiVersion: v1
    kind: ServiceAccount
    metadata:
    name: gefyra-operator
    namespace: gefyra

    ---
    apiVersion: rbac.authorization.k8s.io/v1
    kind: ClusterRole
    [...]

    Please check out the CLI reference for that command.

    If the default configuration is suitable for your environment, directly apply it with:

    gefyra install | kubectl apply -f -

    That will pipe the Kubernetes configs generated by Gefyra's install command directly into the cluster context -that is currently active.
    -Remark: Check you current cluster context with kubectl config current-context

    Default Networking

    Gefyra depends on a working Wireguard VPN connection between the cluster and Gefyra's clients. Setting up that connection is completely managed by Gefyra and only requires little configuration from a cluster admin: that is configuring the VPN route.

    Important: Gefyra's default to expose its Wireguard endpoint is via a Kubernetes service of type NodePort. However, that is only feasible if the Kubernetes nodes have a public (internet-routable) IP address, or at least this IP is reachable for all clients.

    You can check out the Kubernetes service object in the output of gefyra install.

    > gefyra install | grep "type:" -B21

    apiVersion: v1
    kind: Service
    metadata:
    annotations: {}
    labels:
    gefyra.dev/app: stowaway
    gefyra.dev/provider: stowaway
    gefyra.dev/role: connection
    name: gefyra-stowaway-wireguard
    namespace: gefyra
    spec:
    ports:
    - name: gefyra-wireguard
    nodePort: 31820
    port: 51820
    protocol: UDP
    targetPort: 51820
    selector:
    gefyra.dev/app: stowaway
    gefyra.dev/provider: stowaway
    gefyra.dev/role: connection
    type: NodePort

    This service will open up the port 31820 on all of your Kubernetes nodes and route VPN traffic to Gefyra.

    If you don't want to expose Gefyra via a NodePort service, or you don't have routable IPs on your Kubernetes nodes, you need -to set up a UDP load balancing for Gefyra. Luckily, Gefyra's got you covered.

    Setting up a UDP Loadbalancer

    Important: Gefyra's VPN connection is established using UDP traffic. Not all cloud providers offer a UDP load balancing solution. If you can not use a Loadbalancer, you have to stick with the NodePort service.

    To switch the load balancer service for the installation, just set the appropriate option flag for the gefyra install command:

    > gefyra install --service-type=Loadbalancer

    In many cases, the external infrastructure for a Kubernetes cluster is managed via service annotations. With Gefyra you can +that is currently active.

    Kubernetes context

    Check your active cluster context with kubectl config current-context.

    Default Networking

    Gefyra depends on a working Wireguard VPN connection between the cluster and Gefyra's clients. Setting up that connection is completely managed by Gefyra and only requires little configuration from a cluster admin: that is configuring the VPN route.

    NodePort default

    Gefyra's default to expose its Wireguard endpoint is via a Kubernetes service of type NodePort. However, this can only work if the Kubernetes nodes have a public (internet-routable) IP address, or at least this IP is reachable for all clients.

    You can check out the Kubernetes service object in the output of gefyra install.

    > gefyra install | grep "type:" -B21

    apiVersion: v1
    kind: Service
    metadata:
    annotations: {}
    labels:
    gefyra.dev/app: stowaway
    gefyra.dev/provider: stowaway
    gefyra.dev/role: connection
    name: gefyra-stowaway-wireguard
    namespace: gefyra
    spec:
    ports:
    - name: gefyra-wireguard
    nodePort: 31820
    port: 51820
    protocol: UDP
    targetPort: 51820
    selector:
    gefyra.dev/app: stowaway
    gefyra.dev/provider: stowaway
    gefyra.dev/role: connection
    type: NodePort

    This service will open up the port 31820 on all of your Kubernetes nodes and route VPN traffic to Gefyra.

    If you don't want to expose Gefyra via a NodePort service, or you don't have routable IPs on your Kubernetes nodes, you need +to set up a UDP load balancing for Gefyra. Luckily, Gefyra's got you covered.

    Setting up a UDP Loadbalancer

    UDP load balancing

    Gefyra's VPN connection is established using UDP traffic. Not all cloud providers offer a UDP load balancing solution. If you can not use a Loadbalancer, you have to stick with the NodePort service.

    To switch the load balancer service for the installation, just set the appropriate option flag for the gefyra install command:

    > gefyra install --service-type=Loadbalancer

    In many cases, the external infrastructure for a Kubernetes cluster is managed via service annotations. With Gefyra you can set custom annotations easily using the --service-annotations as often as you need.

    For example:
    gefyra install --service-type=Loadbalancer --service-annotations service.beta.kubernetes.io/aws-load-balancer-nlb-target-type=ip --service-annotations ervice.beta.kubernetes.io/aws-load-balancer-scheme=internet-facing will create the following service in your cluster:

    apiVersion: v1
    kind: Service
    metadata:
    annotations:
    # see these annotations
    service.beta.kubernetes.io/aws-load-balancer-nlb-target-type: ip
    service.beta.kubernetes.io/aws-load-balancer-scheme: internet-facing
    labels:
    gefyra.dev/app: stowaway
    gefyra.dev/provider: stowaway
    gefyra.dev/role: connection
    name: gefyra-stowaway-wireguard
    namespace: gefyra
    spec:
    ports:
    - name: gefyra-wireguard
    port: 31820
    protocol: UDP
    targetPort: 51820
    selector:
    gefyra.dev/app: stowaway
    gefyra.dev/provider: stowaway
    gefyra.dev/role: connection
    type: LoadBalancer

    Please be aware that Gefyra comes with a few manually crafted presets for popular Kubernetes offering. Check out the next section to learn how you install Gefyra using an available installation preset.

    Presets

    To make it as convenient as possible, Gefyra offers presets for widely used Kubernetes offerings, such as Google's GKE or Amazon EKS.

    Please check available presets with:

    > gefyra install --help | grep preset

    --preset TEXT Set configs from a preset (available: aws,gke)

    Currently, it's only aws and gke. If you want to add another preset for another popular Kubernetes provider, please consider opening a ticket on GitHub for it.

    Example: If you install Gefyra to an EKS cluster, you only have to set the preset -gefyra install --preset aws | kubectl apply -f -, and it will automatically create the Network Load Balancer via the required annotations on the Kubernetes service:

    apiVersion: v1
    kind: Service
    metadata:
    annotations:
    # see these annotations
    service.beta.kubernetes.io/aws-load-balancer-nlb-target-type: ip
    service.beta.kubernetes.io/aws-load-balancer-scheme: internet-facing
    service.beta.kubernetes.io/aws-load-balancer-type: nlb
    labels:
    gefyra.dev/app: stowaway
    gefyra.dev/provider: stowaway
    gefyra.dev/role: connection
    name: gefyra-stowaway-wireguard
    namespace: gefyra
    spec:
    ports:
    - name: gefyra-wireguard
    port: 31820
    protocol: UDP
    targetPort: 51820
    selector:
    gefyra.dev/app: stowaway
    gefyra.dev/provider: stowaway
    gefyra.dev/role: connection
    type: LoadBalancer
    - +gefyra install --preset aws | kubectl apply -f -, and it will automatically create the Network Load Balancer via the required annotations on the Kubernetes service:

    apiVersion: v1
    kind: Service
    metadata:
    annotations:
    # see these annotations
    service.beta.kubernetes.io/aws-load-balancer-nlb-target-type: ip
    service.beta.kubernetes.io/aws-load-balancer-scheme: internet-facing
    service.beta.kubernetes.io/aws-load-balancer-type: nlb
    labels:
    gefyra.dev/app: stowaway
    gefyra.dev/provider: stowaway
    gefyra.dev/role: connection
    name: gefyra-stowaway-wireguard
    namespace: gefyra
    spec:
    ports:
    - name: gefyra-wireguard
    port: 31820
    protocol: UDP
    targetPort: 51820
    selector:
    gefyra.dev/app: stowaway
    gefyra.dev/provider: stowaway
    gefyra.dev/role: connection
    type: LoadBalancer
    + \ No newline at end of file diff --git a/docs/shared-environments/remote-k8s/eks/index.html b/docs/shared-environments/remote-k8s/eks/index.html index 5c83c01..a4e2a53 100644 --- a/docs/shared-environments/remote-k8s/eks/index.html +++ b/docs/shared-environments/remote-k8s/eks/index.html @@ -16,7 +16,7 @@ - + @@ -30,7 +30,7 @@ them by running kubectl get nodes -o wide | awk {'print $1" " $2 " " $7'} | column -t. Pick one of them from the EXTERNAL-IP column.
  • Now you can run gefyra up --host <IP>
  • Run a local Docker image with Gefyra to make it part of the cluster.
    1. Build your Docker image with a local tag, for example from the testing directory: cd testing/images/ && docker build -f Dockerfile.local . -t pyserver
    2. Execute Gefyra's run command:
      gefyra run -i pyserver -N mypyserver -n default
    3. Exec into the running container and look around. You will find the container to run within your Kubernetes cluster.
      docker exec -it mypyserver bash
      wget -O- hello-nginx will print out the website of the cluster service hello-nginx from within the cluster.
  • Create a bridge to intercept the traffic to the cluster application with the one running locally:
    gefyra bridge -N mypyserver -n default --port 80:8000 --target deploy/hello-nginxdemo/hello-nginx
  • List all running bridges:
    gefyra list --bridges
  • Unbridge the local container and reset the cluster to its original state:
    gefyra unbridge -N mypybridge
  • Cleaning up

    Remove Gefyra's components from the cluster with gefyra down

    Please provide us with your feedback

    Did everything work as expected? How was the experience of using Gefyra? We'd appreciate if you could take 2 minutes of your time to fill out our feedback form.

    - + \ No newline at end of file diff --git a/docs/shared-environments/remote-k8s/gcp/index.html b/docs/shared-environments/remote-k8s/gcp/index.html index 9232767..a002ff8 100644 --- a/docs/shared-environments/remote-k8s/gcp/index.html +++ b/docs/shared-environments/remote-k8s/gcp/index.html @@ -16,7 +16,7 @@ - + @@ -35,7 +35,7 @@ cd testing/images/ && docker build -f Dockerfile.local . -t pyserver
  • Execute Gefyra's run command:
    gefyra run -i pyserver -N mypyserver -n default
  • Exec into the running container and look around. You will find the container to run within your Kubernetes cluster.
    docker exec -it mypyserver bash
    wget -O- hello-nginx will print out the website of the cluster service hello-nginx from within the cluster.
  • Create a bridge in order to intercept the traffic to the cluster application with the one running locally:
    gefyra bridge -N mypyserver -n default --port 80:8000 --target deploy/hello-nginxdemo/hello-nginx
  • List all running bridges:
    gefyra list --bridges
  • Unbridge the local container and reset the cluster to its original state: gefyra unbridge -N mypybridge
  • Cleaning up

    Remove Gefyra's components from the cluster with gefyra down

    Please provide us with your feedback

    Did everything work as expected? How was the experience of using Gefyra? We'd appreciate if you could take 2 minutes of your time to fill out our feedback form.

    - + \ No newline at end of file diff --git a/docs/shared-environments/remote-k8s/index.html b/docs/shared-environments/remote-k8s/index.html index a2ce32f..66b9063 100644 --- a/docs/shared-environments/remote-k8s/index.html +++ b/docs/shared-environments/remote-k8s/index.html @@ -16,7 +16,7 @@ - + @@ -27,7 +27,7 @@ use cases.

    Hey! We would be very happy to know about your Kubernetes development setup. If you can't find your distribuition in this list, please request a guide by creating a GitHub issue using this template.
    It's that simple and very helpful.

    Select your preferred Kubernetes provider from below to start working with Gefyra.

    - + \ No newline at end of file diff --git a/docs/shared-environments/remote-k8s/sys11/index.html b/docs/shared-environments/remote-k8s/sys11/index.html index ab104c5..dc895d7 100644 --- a/docs/shared-environments/remote-k8s/sys11/index.html +++ b/docs/shared-environments/remote-k8s/sys11/index.html @@ -16,7 +16,7 @@ - + @@ -28,7 +28,7 @@ cd testing/images/ && docker build -f Dockerfile.local . -t pyserver
  • Execute Gefyra's run command:
    gefyra run -i pyserver -N mypyserver -n default
  • Exec into the running container and look around. You will find the container to run within your Kubernetes cluster.
    docker exec -it mypyserver bashwget -O- hello-nginx will print out the website of the cluster service hello-nginx from within the cluster.
  • Create a bridge to intercept the traffic to the cluster application with the one running locally:
    gefyra bridge -N mypyserver -n default --port 80:8000 --target deploy/hello-nginxdemo/hello-nginx
  • List all running bridges:
    gefyra list --bridges
  • Unbridge the local container and reset the cluster to its original state: gefyra unbridge -N mypybridge
  • Cleaning up

    Remove Gefyra's components from the cluster with gefyra down

    Please provide us with your feedback

    Did everything work as expected? How was the experience of using Gefyra? We'd appreciate if you could take 2 minutes of your time to fill out our feedback form.

    - + \ No newline at end of file diff --git a/docs/technical-details/architecture/index.html b/docs/technical-details/architecture/index.html index 3c99a26..3ffe5ec 100644 --- a/docs/technical-details/architecture/index.html +++ b/docs/technical-details/architecture/index.html @@ -16,7 +16,7 @@ - + @@ -83,7 +83,7 @@ Developers now can run local integration tests with new software while having access to all interdependent services.
    Once the development job is done, Gefyra properly removes everything, resets Pod <C> to its original configuration, and tears the local environment down (just like nothing ever happened).

    - + \ No newline at end of file diff --git a/docs/technical-details/index.html b/docs/technical-details/index.html index 0264dda..3bfaa26 100644 --- a/docs/technical-details/index.html +++ b/docs/technical-details/index.html @@ -16,7 +16,7 @@ - + @@ -24,7 +24,7 @@ - + \ No newline at end of file diff --git a/docs/technical-details/what/index.html b/docs/technical-details/what/index.html index 05aeb97..389ed0b 100644 --- a/docs/technical-details/what/index.html +++ b/docs/technical-details/what/index.html @@ -16,7 +16,7 @@ - + @@ -38,7 +38,7 @@ in order to allow port 31820 for UDP traffic. It's simple for most Cloud-providers ("Hyperscaler") and doable for custom installations, too.
  • Kubernetes-probes can be faked by Gefyra's Pod component ("Carrier") in order to keep Kubernetes from removing bridged Pods. However, this is currently only supported for httpGet probes. Otherwise, you need to turn off probes during development.
  • You will experience issues if you want to bridge containers in Pods which specify a specific command (other than common shells).
  • This project is in a quite early stage. I assume there are still a few bugs around.
  • Why "Gefyra"?

    "Gefyra" is the Greek word for "Bridge" and fits nicely with kubernetes' nautical theme.

    - + \ No newline at end of file diff --git a/docs/v1_vs_v2/index.html b/docs/v1_vs_v2/index.html index da2ffb4..65757e8 100644 --- a/docs/v1_vs_v2/index.html +++ b/docs/v1_vs_v2/index.html @@ -16,7 +16,7 @@ - + @@ -31,7 +31,7 @@ Load Balancer Presets which expose the necessary parts of Gefyra to make things work.

    CLI - Gefyra's command line interface has been refactored - it's now written in Click. The TUI is much more readable, it includes some progress bars - generally a much nicer experience.

    API - Gefyra's core functionality is now moved into a separate Python package. It provides an API to control Gefyra's processes - like install, run, bridge.

    - + \ No newline at end of file diff --git a/index.html b/index.html index 924f179..73526c4 100644 --- a/index.html +++ b/index.html @@ -16,7 +16,7 @@ - + @@ -24,7 +24,7 @@

    Blazingly-fast, rock-solid, local application development with Kubernetes.

    The Problem

    Building and pushing containers to test them in Kubernetes is repetitive and time-consuming. Writing and debugging code that depends on services in Kubernetes is daunting. Especially if they are not reachable during development.

    The Solution

    Gefyra runs local code in any Kubernetes cluster without the build and push cycle. It overlays containers in the cluster making code changes immediately available. It's a new era of software development.



    Why Gefyra?

    Supercharge Development Speed

    Run your code directly in a Kubernetes cluster and overcome CI/CD waiting times.

    Fight Environment Bugs

    Uncover bugs before they appear on staging or production enviroments.

    Promote Collaboration

    Share running code instantly and let your team work in a realistc environment.

    One Click and Go

    Gefyra is ready in seconds, not hours or days.

    Flexible Workflows

    Integrate Gefyra into existing workflows. Make Gefyra part of your CI/CD pipeline.

    Cost Efficient

    Improve time-to-market and utilization of resources. Spent less on CI/CD pipelines and container builds.


    Docker Desktop Extension

    Gefyra provides a Docker Desktop Extension for even more simple usage.

    Connect your development containers directly to any Kubernetes cluster through Gefyra's Docker Desktop Extension user interface.

    Check it out

    Gefyra Usecases

    Kubernetes as Development Platform

    Local containers on board! If you want to use Kubernetes as your development platform, Gefyra is the right tool for you. It enables you to run your code in Kubernetes without the need to build and push containers. Gefyra overlays the container in Kubernetes with your local container. Instantly see the effects of your code changes in Kubernetes.

    The highest possible development velocity is achieved by using Gefyra in combination with a local or remote Kubernetes cluster.

    See Gefyra in Action
    Auth Service

    Shared Kubernetes-based Resources

    Suppose you are working on a feature that requires collaboration with other team members, such as frontend developers, backend engineers, and database administrators. With Gefyra, you can create a shared environment accessible to the entire team.

    Each team member can work on their respective components while having shared resources available (for example a large database). Gefyra enables you to share your local code with your team and collaborate on a shared environment.

    Kickoff the Collaboration
    collaboration with gefyra

    All Programming Languages and Frameworks

    If it can run in a container, you can develop it in a container. Gefyra supports all platforms that support Docker, and all programming languages and frameworks that can be run in a container.

    Find one of our example projects for container-based development with Gefyra and get started in no time. Be a Dev/Prod-parity hero!





    Let us know about your experience!

    We depend on your feedback - Gefyra's was created out of our own needs and the feedback we received from you, and our community.

    We'd appreciate it if you could take 2 minutes of your time to fill out our feedback form.

    Give feedback
    - + \ No newline at end of file diff --git a/media/index.html b/media/index.html index 2b318a7..0b85c19 100644 --- a/media/index.html +++ b/media/index.html @@ -16,7 +16,7 @@ - + @@ -24,7 +24,7 @@

    Media

    Videos, podcasts and other media about Gefyra.

    Conferences

    Local containers on board! Connect your local containers to K8s using Gefyra | Kubernetes Community Days Munich 2022, Munich

    Debugging a container with a sidecar using Gefyra | Cloud-native Rejects 2022, Valencia

    Debugging a container with a sidecar using Gefyra | Conf42 Cloud Native 2022

    Podcasts

    Accelerate And Simplify Cloud Native Development For Kubernetes Environments With Gefyra - Episode 359

    Other Presentations

    Gefyra Docker Desktop Extension Demo April 2023

    Gefyra Docker Desktop Extension Demo Feb 2023

    Gefyra Docker Desktop Extension Demo Jan 2023

    Development Sessions

    Blog

    - + \ No newline at end of file diff --git a/pricing/index.html b/pricing/index.html index 589561e..9ea46b7 100644 --- a/pricing/index.html +++ b/pricing/index.html @@ -16,7 +16,7 @@ - + @@ -24,7 +24,7 @@

    Pricing

    - + \ No newline at end of file diff --git a/usecases-and-demos/golang/index.html b/usecases-and-demos/golang/index.html index 418f39f..d9118af 100644 --- a/usecases-and-demos/golang/index.html +++ b/usecases-and-demos/golang/index.html @@ -16,7 +16,7 @@ - + @@ -33,7 +33,7 @@ Visit http://gefyra-golang.127.0.0.1.nip.io:8080 in your browser and try changing the contents of the io.WriteString function. Since we mounted our code into the container during gefyra run, air will detect the changes and rebuild/restart our application. Refresh your browser and check out the results!

    - + \ No newline at end of file diff --git a/usecases-and-demos/index.html b/usecases-and-demos/index.html index 1a9e2bf..785c83f 100644 --- a/usecases-and-demos/index.html +++ b/usecases-and-demos/index.html @@ -16,7 +16,7 @@ - + @@ -24,7 +24,7 @@

    Use Cases and Demos

    This chapter contains example use cases and demos. Feel free to adapt these architectures to your applications.

    - + \ No newline at end of file diff --git a/usecases-and-demos/oauth2-demo/index.html b/usecases-and-demos/oauth2-demo/index.html index 6939b78..712576e 100644 --- a/usecases-and-demos/oauth2-demo/index.html +++ b/usecases-and-demos/oauth2-demo/index.html @@ -16,7 +16,7 @@ - + @@ -80,7 +80,7 @@ Gefyra is part of Unikube's development workflow.

    If you are developing django applications, be sure to check out Django-Hurricane, a Kubernetes-native stack specifically created for django and Pycloak, a package that's makes it super easy to integrate OpenID Connect/OAuth2 workflows in django.

    - + \ No newline at end of file diff --git a/usecases-and-demos/remote-gke/index.html b/usecases-and-demos/remote-gke/index.html index 8445793..b3a28ed 100644 --- a/usecases-and-demos/remote-gke/index.html +++ b/usecases-and-demos/remote-gke/index.html @@ -16,7 +16,7 @@ - + @@ -52,7 +52,7 @@ source directory inside the container for hot-reloading using -v and specify the command to be executed on startup.

    Thats it. To get the IP of the container, run

    gefyra list --containers

    Now you can open your browser at <ip>:8000 and get the same 404-Error. You can watch the logs using docker logs -f myspacecraft.

    The reason why we get a 404 not found is simply a missing route. We should add one in src/configuration/urls.py:

     urlpatterns = [
    # django-admin:
    + path("", csrf_exempt(GraphQLView.as_view(graphiql=True))),
    path("admin/doc/", include(admindocs_urls)), # noqa: DJ05
    path("admin/", admin.site.urls),
    path("graphql/", csrf_exempt(GraphQLView.as_view(graphiql=True))),

    If you now reload your browser tab, you should see a graphql input field!

    - + \ No newline at end of file diff --git a/usecases-and-demos/ubuntu-in-namespace/index.html b/usecases-and-demos/ubuntu-in-namespace/index.html index f7b95ec..bd47078 100644 --- a/usecases-and-demos/ubuntu-in-namespace/index.html +++ b/usecases-and-demos/ubuntu-in-namespace/index.html @@ -16,7 +16,7 @@ - + @@ -41,7 +41,7 @@ docker kill myubuntu. That's it.

    Remove the Development Infrastructure

    First run gefyra down to uninstall Gefyra's components. If you have initially created the development infrastructure using Getdeck you can now run:

    $> deck remove --cluster https://github.com/Blueshoe/buzzword-charts.git
    [INFO] Deleting the k3d cluster with name another-cluster

    If you created the infrastructure yourself, you probably already know how to get rid of everything yourself ;-)

    Additional Notes

    If you want maximum convenience for your developers and a supported team oriented workflow, we recommend you check out Unikube. Gefyra is part of Unikube's development workflow.

    - + \ No newline at end of file