Skip to content

Commit 8211cd7

Browse files
committed
wip: grpc public ip discovery
1 parent 170361a commit 8211cd7

File tree

3 files changed

+71
-12
lines changed

3 files changed

+71
-12
lines changed

api/v1alpha1/service_types.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ type GRPCService struct {
2222

2323
TLSConfiguration *TLSConfiguration `json:"tls,omitempty"`
2424
ExternalHost string `json:"externalHost,omitempty"` // TODO implementation
25+
IPDiscovery *IPDiscovery `json:"ipDiscovery,omitempty"`
2526
}
2627

2728
type InterconnectService struct {
@@ -41,3 +42,8 @@ type DatastreamsService struct {
4142

4243
TLSConfiguration *TLSConfiguration `json:"tls,omitempty"`
4344
}
45+
46+
type IPDiscovery struct {
47+
Enabled bool `json:"enabled"`
48+
IPFamily corev1.IPFamily `json:"ipFamily,omitempty"`
49+
}

api/v1alpha1/zz_generated.deepcopy.go

Lines changed: 20 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

internal/resources/database_statefulset.go

Lines changed: 45 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -75,15 +75,26 @@ func (b *DatabaseStatefulSetBuilder) Build(obj client.Object) error {
7575
func (b *DatabaseStatefulSetBuilder) buildEnv() []corev1.EnvVar {
7676
var envVars []corev1.EnvVar
7777

78-
envVars = append(envVars, corev1.EnvVar{
79-
Name: "NODE_NAME", // for `--grpc-public-host` flag
80-
ValueFrom: &corev1.EnvVarSource{
81-
FieldRef: &corev1.ObjectFieldSelector{
82-
APIVersion: "v1",
83-
FieldPath: "metadata.name",
78+
envVars = append(envVars,
79+
corev1.EnvVar{
80+
Name: "NODE_NAME", // for `--grpc-public-host` flag
81+
ValueFrom: &corev1.EnvVarSource{
82+
FieldRef: &corev1.ObjectFieldSelector{
83+
APIVersion: "v1",
84+
FieldPath: "metadata.name",
85+
},
8486
},
8587
},
86-
})
88+
corev1.EnvVar{
89+
Name: "POD_IP", // for `--grpc-public-address-<ip-family>` flag
90+
ValueFrom: &corev1.EnvVarSource{
91+
FieldRef: &corev1.ObjectFieldSelector{
92+
APIVersion: "v1",
93+
FieldPath: "status.podIP",
94+
},
95+
},
96+
},
97+
)
8798

8899
return envVars
89100
}
@@ -621,23 +632,45 @@ func (b *DatabaseStatefulSetBuilder) buildContainerArgs() ([]string, []string) {
621632
}
622633
}
623634

624-
publicHostOption := "--grpc-public-host"
625635
publicHost := fmt.Sprintf(api.InterconnectServiceFQDNFormat, b.Database.Name, b.GetNamespace()) // FIXME .svc.cluster.local
636+
626637
if b.Spec.Service.GRPC.ExternalHost != "" {
627638
publicHost = b.Spec.Service.GRPC.ExternalHost
628639
}
629640
if value, ok := b.ObjectMeta.Annotations[api.AnnotationGRPCPublicHost]; ok {
630641
publicHost = value
631642
}
643+
644+
if b.Spec.Service.GRPC.IPDiscovery != nil && b.Spec.Service.GRPC.IPDiscovery.Enabled == true {
645+
646+
ipFamilyArg := "--grpc-public-address-v4"
647+
648+
if b.Spec.Service.GRPC.IPDiscovery.IPFamily == corev1.IPv6Protocol {
649+
ipFamilyArg = "--grpc-public-address-v6"
650+
}
651+
652+
args = append(
653+
args,
654+
"--grpc-public-target-name-override",
655+
fmt.Sprintf("%s.%s", "$(NODE_NAME)", publicHost),
656+
657+
ipFamilyArg,
658+
"$(POD_IP)",
659+
)
660+
} else {
661+
publicHostOption := "--grpc-public-host"
662+
args = append(
663+
args,
664+
publicHostOption,
665+
fmt.Sprintf("%s.%s", "$(NODE_NAME)", publicHost), // fixme $(NODE_NAME)
666+
)
667+
}
668+
632669
publicPortOption := "--grpc-public-port"
633670
publicPort := api.GRPCPort
634671

635672
args = append(
636673
args,
637-
638-
publicHostOption,
639-
fmt.Sprintf("%s.%s", "$(NODE_NAME)", publicHost), // fixme $(NODE_NAME)
640-
641674
publicPortOption,
642675
strconv.Itoa(publicPort),
643676
)

0 commit comments

Comments
 (0)