-
Notifications
You must be signed in to change notification settings - Fork 634
feat: initial proxy protocol support #12979
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
Merged
Changes from all commits
Commits
Show all changes
14 commits
Select commit
Hold shift + click to select a range
883cb9b
initial proxy protocol support
yuval-k 56bedfa
add e2e test
yuval-k e0a8750
fix comment
yuval-k 89094b4
Merge remote-tracking branch 'origin/main' into yuval-k/proxy-proto
yuval-k bc49a08
add status markers
yuval-k 2016187
lint and verify
yuval-k 89b8467
log to debug
yuval-k 4d87b0c
PR comments
yuval-k 4bcab2d
add e2e test to CI
yuval-k 7f3b73e
lint
yuval-k 32f0d89
Merge remote-tracking branch 'origin/main' into yuval-k/proxy-proto
yuval-k 5db7afc
fix merge; make analyze
yuval-k 81f62b7
tidy
yuval-k d6d545c
gen
yuval-k File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,66 @@ | ||
| package v1alpha1 | ||
|
|
||
| import ( | ||
| metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" | ||
| gwv1 "sigs.k8s.io/gateway-api/apis/v1" | ||
| ) | ||
|
|
||
| // +kubebuilder:rbac:groups=gateway.kgateway.dev,resources=listenerpolicies,verbs=get;list;watch | ||
| // +kubebuilder:rbac:groups=gateway.kgateway.dev,resources=listenerpolicies/status,verbs=get;update;patch | ||
|
|
||
| // +kubebuilder:printcolumn:name="Accepted",type=string,JSONPath=".status.ancestors[*].conditions[?(@.type=='Accepted')].status",description="Listener policy acceptance status" | ||
| // +kubebuilder:printcolumn:name="Attached",type=string,JSONPath=".status.ancestors[*].conditions[?(@.type=='Attached')].status",description="Listener policy attachment status" | ||
|
|
||
| // +genclient | ||
| // +kubebuilder:object:root=true | ||
| // +kubebuilder:metadata:labels={app=kgateway,app.kubernetes.io/name=kgateway} | ||
| // +kubebuilder:resource:categories=kgateway | ||
| // +kubebuilder:subresource:status | ||
| // +kubebuilder:metadata:labels="gateway.networking.k8s.io/policy=Direct" | ||
| // ListenerPolicy is used for configuring Envoy listener-level settings that apply to all protocol types (HTTP, HTTPS, TCP, TLS). | ||
| // These policies can only target `Gateway` objects. | ||
| type ListenerPolicy struct { | ||
| metav1.TypeMeta `json:",inline"` | ||
| // +optional | ||
| metav1.ObjectMeta `json:"metadata,omitempty"` | ||
| // +required | ||
| Spec ListenerPolicySpec `json:"spec"` | ||
| // +optional | ||
| Status gwv1.PolicyStatus `json:"status,omitempty"` | ||
| } | ||
|
|
||
| // +kubebuilder:object:root=true | ||
| type ListenerPolicyList struct { | ||
| metav1.TypeMeta `json:",inline"` | ||
| metav1.ListMeta `json:"metadata,omitempty"` | ||
| Items []ListenerPolicy `json:"items"` | ||
| } | ||
|
|
||
| // ListenerPolicySpec defines the desired state of a listener policy. | ||
| type ListenerPolicySpec struct { | ||
| // TargetRefs specifies the target resources by reference to attach the policy to. | ||
| // Only supports `Gateway` resources | ||
| // +optional | ||
| // | ||
| // +kubebuilder:validation:MinItems=1 | ||
| // +kubebuilder:validation:MaxItems=16 | ||
| // +kubebuilder:validation:XValidation:rule="self.all(r, r.kind == 'Gateway' && (!has(r.group) || r.group == 'gateway.networking.k8s.io'))",message="targetRefs may only reference Gateway resource" | ||
| TargetRefs []LocalPolicyTargetReference `json:"targetRefs,omitempty"` | ||
|
|
||
| // TargetSelectors specifies the target selectors to select `Gateway` resources to attach the policy to. | ||
| // +optional | ||
| // +kubebuilder:validation:XValidation:rule="self.all(r, r.kind == 'Gateway' && (!has(r.group) || r.group == 'gateway.networking.k8s.io'))",message="targetSelectors may only reference Gateway resource" | ||
| TargetSelectors []LocalPolicyTargetSelector `json:"targetSelectors,omitempty"` | ||
|
|
||
| // ProxyProtocol configures the PROXY protocol listener filter. | ||
| // When set, Envoy will expect connections to include the PROXY protocol header. | ||
| // This is commonly used when kgateway is behind a load balancer that preserves client IP information. | ||
| // See here for more information: https://www.envoyproxy.io/docs/envoy/latest/api-v3/extensions/filters/listener/proxy_protocol/v3/proxy_protocol.proto | ||
| // +optional | ||
| ProxyProtocol *ProxyProtocolConfig `json:"proxyProtocol,omitempty"` | ||
| } | ||
|
|
||
| // ProxyProtocolConfig configures the PROXY protocol listener filter. | ||
| // The presence of this configuration enables PROXY protocol support. | ||
| type ProxyProtocolConfig struct { | ||
| } |
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Oops, something went wrong.
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Oops, something went wrong.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
We should move this outside of the direct dependency require block imo.