You can upgrade an already running Cluster via the command octops upgrade as shown here. You can read the full changelog here. NOTE: skip v0.25.0 and v0.26.0 due to errors in the Cluster image build workflows.
Features
- Clientless authentication for workloads via OIDC-based assertions via OAuth2 client credentials authentication (i.e. RFC 7523). So far this federated workload identity was supported only for the client-based mode via
octelium login --assertion. Now with this clientless authentication mode,WORKLOADUsers can authenticate themselves using OIDC identity tokens issued by the identity provider hosting the workload ( e.g. Azure, GitHub Actions, Kubernetes clusters, SPIFFE, etc...) and access the Cluster's HTTP-based resources. Here is an example in Golang but you can apply the same in any language:
package main
import (
"context"
"fmt"
"io"
"net/http"
"golang.org/x/oauth2/clientcredentials"
)
func main() {
ctx := context.Background()
domain := "example.com"
// 1. Configure the OAuth2 Client Credentials exchange
config := clientcredentials.Config{
TokenURL: fmt.Sprintf("https://%s/oauth2/token", domain),
EndpointParams: map[string][]string{
"client_assertion_type": {"urn:ietf:params:oauth:client-assertion-type:jwt-bearer"},
"client_assertion": {yourJWT},
},
}
// 2. Create an HTTP Client with your OAuth2 client credentials configuration
httpClient := config.Client(ctx)
// 3. Access the "demo-nginx" Service
resp, err := httpClient.Get(fmt.Sprintf("https://demo-nginx.%s/", domain))
if err != nil {
panic(err)
}
defer resp.Body.Close()
body, _ := io.ReadAll(resp.Body)
if resp.StatusCode != http.StatusOK {
panic(err)
}
fmt.Printf("Response: %s\n", string(body))
}- Bootstrap config now supports using the passwords of primary and secondary storage stores (i.e. Postgres and Redis database passwords) by reference from Kubernetes secrets. Here is an example:
spec:
primaryStorage:
postgresql:
username: octelium
passwordFromSecret:
name: octelium-pg
namespace: default
key: password
host: octelium-pg-postgresql.default.svc
database: octelium
port: 5432
secondaryStorage:
redis:
passwordFromSecret:
name: octelium-redis
namespace: default
key: password
host: octelium-redis-master.default.svc
port: 6379- Exposing the per-request downstream IP address in
ctx.request.ip. For now, this works only in the clientless mode for Clusters behind an external proxy (read more here).
Improvements
- Various improvements for the
octeliumCLI in Windows and MacOS. Furthermore,octelium connect -dis now supported in MacOS. - Devices are now automatically registered for clients used by
HUMANUsers upon login. arm64/aarch64support for the Cluster components.arm64/aarch64support for theoctelium,octeliumctlandoctopscontainer images..deband.rpmpackages for Linux, both foramd64andarm64..pkgpackages for MacOS, both foramd64andarm64..msipackages for Windows, both foramd64andarm64.