-
Notifications
You must be signed in to change notification settings - Fork 119
[seaweedfs] Client mode refactoring and fix issues #1277
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
Conversation
Caution Review failedThe pull request is closed. WalkthroughThis update refactors the SeaweedFS Helm chart's external filer service configuration. It replaces the previous Changes
Sequence Diagram(s)sequenceDiagram
participant User
participant Helm
participant Kubernetes
participant Filer Pod
participant Ingress
User->>Helm: Install/Upgrade SeaweedFS with new values
Helm->>Kubernetes: Render templates (with grpcHost, grpcPort, whitelist)
Kubernetes->>Filer Pod: Deploy filer with specified grpcHost/Port
Kubernetes->>Ingress: (If enabled) Create Ingress for filer external access
User->>Ingress: Connect to filer via GRPCS
Ingress->>Filer Pod: Route traffic if source in whitelist
Estimated code review effort🎯 3 (Moderate) | ⏱️ ~15–20 minutes Suggested labels
Suggested reviewers
Poem
Note ⚡️ Unit Test Generation is now available in beta!Learn more here, or try it out under "Finishing Touches" below. 📜 Recent review detailsConfiguration used: CodeRabbit UI 📒 Files selected for processing (11)
✨ Finishing Touches🧪 Generate unit tests
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. 🪧 TipsChatThere are 3 ways to chat with CodeRabbit:
SupportNeed help? Create a ticket on our support page for assistance with any issues or questions. Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments. CodeRabbit Commands (Invoked using PR comments)
Other keywords and placeholders
CodeRabbit Configuration File (
|
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.
Summary of Changes
Hello @kvaps, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed!
This pull request introduces significant refactoring and enhancements to the SeaweedFS deployment, particularly for its client mode and external accessibility. It updates the COSI driver, streamlines configuration by replacing a single remoteEndpoint
with more specific filer.grpcHost
and filer.grpcPort
parameters, and improves external exposure by implementing Nginx Ingress with GRPC passthrough and IP whitelisting. These changes aim to provide a more robust, secure, and configurable SeaweedFS setup.
Highlights
- Client Mode Refactoring: The configuration for SeaweedFS's 'Client' topology has been refactored. The previous
remoteEndpoint
parameter has been replaced by more granularfiler.grpcHost
andfiler.grpcPort
settings, providing clearer separation and control over the GRPC service endpoint. - COSI Driver Update and Integration: The
seaweedfs-cosi-driver
has been updated to versionv0.2.0
. Its deployment configuration now dynamically pulls the image tag from a dedicated file and utilizes the newfiler.grpcHost
andfiler.grpcPort
parameters for connecting to the SeaweedFS filer. - Nginx Ingress for External Filer Access: External access to the SeaweedFS filer is now managed via a new Nginx Ingress resource. This ingress is configured for GRPC passthrough and includes support for IP whitelisting, replacing the previous LoadBalancer service for external exposure.
- IP Whitelisting Capability: A new
filer.whitelist
parameter has been introduced, allowing users to specify a list of IP addresses or CIDR ranges. This whitelist is applied to the Nginx Ingress, enhancing security by restricting access to the filer service.
Using Gemini Code Assist
The full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips.
Invoking Gemini
You can request assistance from Gemini at any point in your pull request via creating an issue comment (i.e. comment on the pull request page) using either /gemini <command>
or @gemini-code-assist <command>
. Below is a summary of the supported commands.
Feature | Command | Description |
---|---|---|
Code Review | /gemini review |
Performs a code review for the current pull request in its current state. |
Pull Request Summary | /gemini summary |
Provides a summary of the current pull request in its current state. |
Comment | @gemini-code-assist | Responds in comments when explicitly tagged, both in issue comments and review comments. |
Help | /gemini help |
Displays a list of available commands. |
Customization
To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a .gemini/
folder in the base of the repository. Detailed instructions can be found here.
Limitations & Feedback
Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments or fill out our survey to provide feedback.
You can also get AI-powered code generation, chat, as well as code reviews directly in the IDE at no cost with the Gemini Code Assist IDE Extension.
Footnotes
-
Review the Privacy Notices, Generative AI Prohibited Use Policy, Terms of Service, and learn how to configure Gemini Code Assist in GitHub here. Gemini can make mistakes, so double check it and use code with caution. ↩
- update cosi-driver - add support exporting via nginx-ingress - add support for whitelist Signed-off-by: Andrei Kvapil <kvapss@gmail.com>
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.
Code Review
This pull request refactors the SeaweedFS client mode configuration by replacing remoteEndpoint
with filer.grpcHost
and filer.grpcPort
, which improves clarity. It also introduces support for exporting the filer via nginx-ingress and a configurable IP whitelist.
The changes are well-structured, but I've identified a few issues:
- There are some unused variables in the new
ingress.yaml
template. - A potential template rendering error exists in the
whitelist-source-range
annotation logic withiningress.yaml
. - The JSON schema for the new
whitelist
value is incomplete.
I've provided suggestions to address these points. Overall, a good set of changes that will improve the chart's flexibility.
annotations: | ||
nginx.ingress.kubernetes.io/backend-protocol: GRPCS | ||
nginx.ingress.kubernetes.io/ssl-passthrough: "true" | ||
nginx.ingress.kubernetes.io/whitelist-source-range: "{{ join "," (.Values.filer.whitelist | default "0.0.0.0/32") }}" |
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.
The expression for whitelist-source-range
is susceptible to a template rendering error. If .Values.filer.whitelist
is not set in a values file, it will be nil
, and the default
filter will return the string "0.0.0.0/32"
. The join
function expects a list, not a string, which will cause a failure.
A safer approach is to default to an empty list, which will result in an empty string for the annotation value. This is generally interpreted by Ingress controllers as not applying any IP-based restriction.
Additionally, the default value "0.0.0.0/32"
is highly restrictive and only allows traffic from the IP address 0.0.0.0
, which is likely not the intended behavior.
nginx.ingress.kubernetes.io/whitelist-source-range: "{{ join "," (.Values.filer.whitelist | default (list)) }}"
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.
empty list is not working for nginx ingress
{{- $cozyConfig := lookup "v1" "ConfigMap" "cozy-system" "cozystack" }} | ||
{{- $issuerType := (index $cozyConfig.data "clusterissuer") | default "http01" }} | ||
|
||
{{- $myNS := lookup "v1" "Namespace" "" .Release.Namespace }} | ||
{{- $ingress := index $myNS.metadata.annotations "namespace.cozystack.io/ingress" }} | ||
{{- $host := index $myNS.metadata.annotations "namespace.cozystack.io/host" }} |
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.
"description": "A list of IP addresses or CIDR ranges that are allowed to access the filer service.", | ||
"items": {}, | ||
"type": "array" |
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.
- update cosi-driver - add support exporting via nginx-ingress - add support for whitelist Signed-off-by: Andrei Kvapil <kvapss@gmail.com> <!-- Thank you for making a contribution! Here are some tips for you: - Start the PR title with the [label] of Cozystack component: - For system components: [platform], [system], [linstor], [cilium], [kube-ovn], [dashboard], [cluster-api], etc. - For managed apps: [apps], [tenant], [kubernetes], [postgres], [virtual-machine] etc. - For development and maintenance: [tests], [ci], [docs], [maintenance]. - If it's a work in progress, consider creating this PR as a draft. - Don't hesistate to ask for opinion and review in the community chats, even if it's still a draft. - Add the label `backport` if it's a bugfix that needs to be backported to a previous version. --> <!-- Write a release note: - Explain what has changed internally and for users. - Start with the same [label] as in the PR title - Follow the guidelines at https://github.com/kubernetes/community/blob/master/contributors/guide/release-notes.md. --> ```release-note [seaweedfs] Client mode refactoring and fix issues - update cosi-driver - add support exporting via nginx-ingress - add support for whitelist ```
Signed-off-by: Andrei Kvapil kvapss@gmail.com
What this PR does
Release note
Summary by CodeRabbit
New Features
Bug Fixes
Documentation
Chores