Skip to content

Commit edf54c0

Browse files
authored
Merge pull request #568 from chengshifan/disable-legacy-auth
chore: disable legacy-authorization when creating clusters
2 parents 165ac77 + efbc2a7 commit edf54c0

6 files changed

Lines changed: 125 additions & 65 deletions

File tree

deploy/infrabox/templates/api/deployment.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ spec:
4848
memory: "1200Mi"
4949
limits:
5050
cpu: "1000m"
51-
memory: "2000Mi"
51+
memory: "4Gi"
5252
volumeMounts:
5353
{{ include "mounts_rsa_public" . | indent 16 }}
5454
{{ include "mounts_rsa_private" . | indent 16 }}

deploy/infrabox/templates/scheduler/deployment.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ spec:
2929
memory: "400Mi"
3030
limits:
3131
cpu: "500m"
32-
memory: "800Mi"
32+
memory: "2Gi"
3333
env:
3434
{{ include "env_database" . | indent 16 }}
3535
{{ include "env_general" . | indent 16 }}

src/services/gcp/Dockerfile

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,8 @@ RUN apk --no-cache add \
2525
libc6-compat \
2626
openssh-client \
2727
git \
28+
python3 \
29+
py3-pip \
2830
&& curl -O https://dl.google.com/dl/cloudsdk/channels/rapid/downloads/google-cloud-sdk-${CLOUD_SDK_VERSION}-linux-x86_64.tar.gz && \
2931
tar xzf google-cloud-sdk-${CLOUD_SDK_VERSION}-linux-x86_64.tar.gz && \
3032
rm google-cloud-sdk-${CLOUD_SDK_VERSION}-linux-x86_64.tar.gz && \
@@ -34,10 +36,12 @@ RUN apk --no-cache add \
3436
gcloud config set metrics/environment github_docker_image && \
3537
gcloud components install kubectl && \
3638
gcloud --version && \
37-
gcloud components install beta
39+
gcloud components install beta && \
40+
pip3 install update pip && pip3 install ipaddress
3841

3942
WORKDIR /app
4043
COPY --from=build-env /go/src/github.com/sap/infrabox/src/services/gcp/tmp/_output/bin/gcp /app/gcp
44+
COPY --from=build-env /go/src/github.com/sap/infrabox/src/services/gcp/scripts/subnet_fetcher.py /app/subnet_fetcher.py
4145

4246
RUN addgroup -S infrabox && adduser -S -G infrabox infrabox
4347
USER infrabox

src/services/gcp/infrabox-service-gcp/templates/deployment.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ spec:
3636
memory: "1200Mi"
3737
limits:
3838
cpu: "1000m"
39-
memory: "2400Mi"
39+
memory: "4Gi"
4040
volumeMounts:
4141
- name: service-account
4242
mountPath: "/var/run/infrabox.net/gcp"

src/services/gcp/pkg/stub/handler.go

Lines changed: 112 additions & 61 deletions
Original file line numberDiff line numberDiff line change
@@ -1,57 +1,57 @@
11
package stub
22

33
import (
4-
"bytes"
5-
"crypto/tls"
6-
"crypto/x509"
7-
b64 "encoding/base64"
8-
"encoding/json"
9-
"fmt"
10-
"io/ioutil"
11-
"mime/multipart"
12-
"net/http"
13-
"os"
14-
"os/exec"
15-
"path"
16-
"strconv"
17-
"strings"
18-
"time"
19-
20-
uuid "github.com/satori/go.uuid"
21-
22-
"github.com/sap/infrabox/src/services/gcp/pkg/apis/gcp/v1alpha1"
23-
"github.com/sap/infrabox/src/services/gcp/pkg/stub/cleaner"
24-
25-
goerrors "errors"
26-
27-
"k8s.io/client-go/discovery"
28-
"k8s.io/client-go/discovery/cached"
29-
"k8s.io/client-go/dynamic"
30-
"k8s.io/client-go/kubernetes"
31-
_ "k8s.io/client-go/plugin/pkg/client/auth/gcp"
32-
"k8s.io/client-go/rest"
33-
"k8s.io/client-go/tools/clientcmd"
34-
clientcmdapi "k8s.io/client-go/tools/clientcmd/api"
35-
36-
"github.com/operator-framework/operator-sdk/pkg/sdk/action"
37-
"github.com/operator-framework/operator-sdk/pkg/sdk/handler"
38-
"github.com/operator-framework/operator-sdk/pkg/sdk/types"
39-
"github.com/operator-framework/operator-sdk/pkg/util/k8sutil"
40-
41-
"github.com/sirupsen/logrus"
42-
43-
appsv1 "k8s.io/api/apps/v1"
44-
v1 "k8s.io/api/core/v1"
45-
rbacv1 "k8s.io/api/rbac/v1"
46-
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
47-
48-
"k8s.io/apimachinery/pkg/api/errors"
49-
"k8s.io/apimachinery/pkg/api/meta"
50-
"k8s.io/apimachinery/pkg/api/resource"
51-
"k8s.io/apimachinery/pkg/runtime/schema"
52-
"k8s.io/apimachinery/pkg/util/intstr"
53-
54-
"github.com/mholt/archiver"
4+
"bytes"
5+
"crypto/tls"
6+
"crypto/x509"
7+
b64 "encoding/base64"
8+
"encoding/json"
9+
"fmt"
10+
"io/ioutil"
11+
"mime/multipart"
12+
"net/http"
13+
"os"
14+
"os/exec"
15+
"path"
16+
"strconv"
17+
"strings"
18+
"time"
19+
20+
uuid "github.com/satori/go.uuid"
21+
22+
"github.com/sap/infrabox/src/services/gcp/pkg/apis/gcp/v1alpha1"
23+
"github.com/sap/infrabox/src/services/gcp/pkg/stub/cleaner"
24+
25+
goerrors "errors"
26+
27+
"k8s.io/client-go/discovery"
28+
"k8s.io/client-go/discovery/cached"
29+
"k8s.io/client-go/dynamic"
30+
"k8s.io/client-go/kubernetes"
31+
_ "k8s.io/client-go/plugin/pkg/client/auth/gcp"
32+
"k8s.io/client-go/rest"
33+
"k8s.io/client-go/tools/clientcmd"
34+
clientcmdapi "k8s.io/client-go/tools/clientcmd/api"
35+
36+
"github.com/operator-framework/operator-sdk/pkg/sdk/action"
37+
"github.com/operator-framework/operator-sdk/pkg/sdk/handler"
38+
"github.com/operator-framework/operator-sdk/pkg/sdk/types"
39+
"github.com/operator-framework/operator-sdk/pkg/util/k8sutil"
40+
41+
"github.com/sirupsen/logrus"
42+
43+
appsv1 "k8s.io/api/apps/v1"
44+
v1 "k8s.io/api/core/v1"
45+
rbacv1 "k8s.io/api/rbac/v1"
46+
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
47+
48+
"k8s.io/apimachinery/pkg/api/errors"
49+
"k8s.io/apimachinery/pkg/api/meta"
50+
"k8s.io/apimachinery/pkg/api/resource"
51+
"k8s.io/apimachinery/pkg/runtime/schema"
52+
"k8s.io/apimachinery/pkg/util/intstr"
53+
54+
"github.com/mholt/archiver"
5555
)
5656

5757
const adminSAName = "admin"
@@ -66,11 +66,12 @@ type MasterAuth struct {
6666
}
6767

6868
type RemoteCluster struct {
69-
Name string
70-
Status string
71-
Zone string
72-
Endpoint string
73-
MasterAuth MasterAuth
69+
Name string
70+
Status string
71+
Zone string
72+
Endpoint string
73+
PrivateClusterConfig map[string]interface{}
74+
MasterAuth MasterAuth
7475
}
7576

7677
func NewHandler() handler.Handler {
@@ -95,15 +96,13 @@ func setClusterName(cr *v1alpha1.GKECluster, log *logrus.Entry) error {
9596
func createCluster(cr *v1alpha1.GKECluster, log *logrus.Entry) (*v1alpha1.GKEClusterStatus, error) {
9697
limit := os.Getenv("MAX_NUM_CLUSTERS")
9798
status := cr.Status
98-
99-
if limit != "" {
10099
gkeclusters, err := getRemoteClusters(log)
101100
if err != nil && !errors.IsNotFound(err) {
102101
err = fmt.Errorf("could not get GKE Clusters: %v", err)
103102
log.Error(err)
104103
return nil, err
105104
}
106-
105+
if limit != "" {
107106
l, err := strconv.Atoi(limit)
108107

109108
if err != nil {
@@ -118,6 +117,24 @@ func createCluster(cr *v1alpha1.GKECluster, log *logrus.Entry) (*v1alpha1.GKEClu
118117
return &status, nil
119118
}
120119
}
120+
masterIPv4CIRDs := getExistingMasterIPv4CIRDs(gkeclusters)
121+
finalCIDR := ""
122+
log.Debugf("existng ipv4 cidr: %s", masterIPv4CIRDs)
123+
for {
124+
cidr, err := getRandomIPv4CIRD()
125+
log.Infof("generate master ipv4 cidr: %s", cidr)
126+
if err != nil {
127+
err = fmt.Errorf("err while getting CIDR for Cluster %s: %s", cr.Status.ClusterName, err)
128+
log.Error(err)
129+
return nil, err
130+
} else {
131+
log.Debugf("check if %s in %s", cidr, masterIPv4CIRDs)
132+
if !contains(masterIPv4CIRDs, cidr) {
133+
finalCIDR = cidr
134+
break
135+
}
136+
}
137+
}
121138

122139
log.Infof("Create GKE cluster %s", cr.Status.ClusterName)
123140
args := []string{"container", "clusters",
@@ -202,7 +219,11 @@ func createCluster(cr *v1alpha1.GKECluster, log *logrus.Entry) (*v1alpha1.GKEClu
202219
args = append(args, "--services-ipv4-cidr", cr.Spec.ServiceCidr)
203220
}
204221

205-
222+
args = append(args, "--no-enable-legacy-authorization")
223+
args = append(args, "--enable-private-nodes")
224+
args = append(args, "--master-ipv4-cidr", finalCIDR)
225+
args = append(args, "--enable-master-authorized-networks")
226+
args = append(args, "--master-authorized-networks", "0.0.0.0/0")
206227
cmd := exec.Command("gcloud" , args...)
207228
out, err := cmd.CombinedOutput()
208229

@@ -847,6 +868,36 @@ func getOutdatedClusters(maxAge string, log *logrus.Entry) ([]RemoteCluster, err
847868
return gkeclusters, nil
848869
}
849870

871+
func getExistingMasterIPv4CIRDs(gkeclusters []RemoteCluster) []string {
872+
var allMasterIPv4CIRSs = make([]string, 0)
873+
for _, gkecluster := range gkeclusters {
874+
masterIpv4CidrBlock, ok := gkecluster.PrivateClusterConfig["masterIpv4CidrBlock"].(string)
875+
if ok && masterIpv4CidrBlock != "" {
876+
allMasterIPv4CIRSs = append(allMasterIPv4CIRSs, masterIpv4CidrBlock)
877+
}
878+
}
879+
return allMasterIPv4CIRSs
880+
}
881+
882+
func getRandomIPv4CIRD() (string, error) {
883+
cmd := exec.Command("python3" , "/app/subnet_fetcher.py")
884+
out, err := cmd.CombinedOutput()
885+
if err != nil {
886+
return "", err
887+
}
888+
result := strings.ReplaceAll(string(out), "\n", "")
889+
return result, nil
890+
}
891+
892+
func contains(s []string, e string) bool {
893+
for _, a := range s {
894+
if a == e {
895+
return true
896+
}
897+
}
898+
return false
899+
}
900+
850901
func generateKubeconfig(c *RemoteCluster) []byte {
851902
caCrt, _ := b64.StdEncoding.DecodeString(c.MasterAuth.ClusterCaCertificate)
852903
clusters := make(map[string]*clientcmdapi.Cluster)
@@ -1488,4 +1539,4 @@ func newCollectorDaemonSet() *appsv1.DaemonSet {
14881539
},
14891540
},
14901541
}
1491-
}
1542+
}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
import ipaddress
2+
import random
3+
network="192.168.0.0/16"
4+
blocks = list(ipaddress.IPv4Network(network).subnets(new_prefix=28))
5+
print(str(random.choice(blocks)))

0 commit comments

Comments
 (0)