איזון עומסים באמצעות F5 ובקרים מדור קודם שסופקו על ידי Google

בגרסה 1.29 ומטה, אשכולות משתמשים שנוצרו באמצעות ההגדרה loadBalancer.f5BigIP פרסו בקרי F5 שסופקו על ידי Google. בגלל ההגבלות של הבקרים האלה, בגרסה 1.30 ואילך, Google Distributed Cloud חוסם יצירה של אשכולות עם ההגדרה loadBalancer.f5BigIP. במקום זאת, צריך להגדיר אשכולות חדשים לאיזון עומסים ידני, ולפרוס בקרי F5 בעצמכם.

בדף הזה מוסבר איך לפרוס את בקרי F5 מדור קודם שסופקו על ידי Google עבור אשכול משתמש שנוצר באמצעות Google Distributed Cloud. למרות שיש תמיכה בפריסת הבקרים האלה, מומלץ להתקין את בקר ה-CIS העדכני של F5.

דרישות מוקדמות:

  • יש לכם אשכול משתמשים עם ההגדרה manualLB.

  • יש לכם שרת F5 לאשכול המשתמשים ואתם יודעים את פרטי הכניסה שלו.

  • אתם רוצים להגדיר אוטומטית שרתים וירטואליים ב-F5 עבור שירותי Kubernetes מסוג LoadBalancer באשכול המשתמשים.

שלב 1. הכנת תבניות לבקרי המשחקים

מקבלים את המידע של F5 ויוצרים את התבניות.

קבלת מידע על F5

  1. מגדירים את משתני הפלייסהולדר הבאים עם פרטי הכניסה משרת F5:

    • F5 UserName: USERNAME

    • סיסמת F5: PASSWORD

    • כתובת F5: ADDRESS

    • F5 Partition: PARTITION

  2. מגדירים את SnatPoolName. אם אתם לא משתמשים ב-SNAT, משאירים את משתנה ה-placeholder ריק:

    SnatPoolName: SNAT_POOL_NAME
    

קבלת פרטי הרישום והגרסה

  1. מקבלים את המשאב המותאם אישית onpremusercluster:

    kubectl --kubeconfig USER_CLUSTER_KUBECONFIG get onpremusercluster -oyaml -n kube-system
    
  2. מעתיקים את השדות הבאים מonpremusercluster המשאב המותאם אישית:

    Registry: REGISTRY (onpremusercluster.spec.registry.address)
    ImageTag: IMAGE_TAG (onpremusercluster.spec.gkeOnPremVersion)
    

יצירת התבניות

cat > templates.yaml << EOF
apiVersion: v1
kind: Secret
metadata:
  name: bigip-login
  namespace: kube-system
stringData:
  password: "PASSWORD"
  username: "USERNAME"
  url: "ADDRESS"
  partition: "PARTITION"
---
apiVersion: v1
kind: ServiceAccount
metadata:
  name: bigip-ctlr
  namespace: kube-system
---
apiVersion: v1
kind: ServiceAccount
metadata:
  name: load-balancer-f5
  namespace: kube-system
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: k8s-bigip-ctlr-deployment
  namespace: kube-system
spec:
  replicas: 1
  selector:
    matchLabels:
      app: k8s-bigip-ctlr
  template:
    metadata:
      name: k8s-bigip-ctlr
      labels:
        app: k8s-bigip-ctlr
    spec:
      serviceAccountName: bigip-ctlr
      volumes:
        - name: bigip-login
          secret:
            secretName: bigip-login
      containers:
        - name: k8s-bigip-ctlr
          image: "REGISTRY/k8s-bigip-ctlr:v1.14.0-gke.28"
          resources:
            requests:
              cpu: 60m
              memory: 90Mi
          volumeMounts:
            - name: bigip-login
              readOnly: true
              mountPath: "/etc/bigip-login"
          env:
            - name: BIGIP_PARTITION
              valueFrom:
                secretKeyRef:
                  name: bigip-login
                  key: partition
          command: ["/app/bin/k8s-bigip-ctlr"]
          args: [
            # See the k8s-bigip-ctlr documentation for information about
            # all config options
            # http://clouddocs.f5.com/products/connectors/k8s-bigip-ctlr/latest
            "--http-listen-address=:9097",
            "--credentials-directory=/etc/bigip-login",
            "--bigip-partition=\$(BIGIP_PARTITION)",
            "--log-level=ERROR",
            "--pool-member-type=nodeport",
            "--manage-ingress=false",
            "--vs-snat-pool-name=SNAT_POOL_NAME"
          ]
      dnsPolicy: Default
      imagePullSecrets:
        - name: private-registry-creds
      nodeSelector:
        kubernetes.io/os: linux
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: load-balancer-f5
  namespace: kube-system
  labels:
    app: load-balancer-f5
spec:
  replicas: 1
  selector:
    matchLabels:
      app: load-balancer-f5
  template:
    metadata:
      name: load-balancer-f5
      labels:
        app: load-balancer-f5
    spec:
      serviceAccountName: load-balancer-f5
      containers:
        - name: load-balancer-f5
          image: "REGISTRY/load-balancer-f5:IMAGE_TAG"
          env:
            - name: BIGIP_PARTITION
              valueFrom:
                secretKeyRef:
                  name: bigip-login
                  key: partition
          command:
            - ./load-balancer-f5
          args:
            - "--bigip-partition=\$(BIGIP_PARTITION)"
          resources:
            requests:
              cpu: 2m
              memory: 13Mi
      imagePullSecrets:
        - name: private-registry-creds
      nodeSelector:
        kubernetes.io/os: linux
---
kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: bigip-ctlr-clusterrole-binding
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: bigip-ctlr-clusterrole
subjects:
  - kind: ServiceAccount
    name: bigip-ctlr
    namespace: kube-system
---
kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: load-balancer-f5-clusterrole-binding
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: load-balancer-f5-clusterrole
subjects:
  - kind: ServiceAccount
    name: load-balancer-f5
    namespace: kube-system
---
kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name:
    bigip-ctlr-clusterrole
rules:
  - apiGroups: ["", "extensions"]
    resources: ["nodes", "services", "endpoints", "namespaces", "ingresses", "pods"]
    verbs: ["get", "list", "watch"]
  - apiGroups: ["", "extensions"]
    resources: ["configmaps", "events", "ingresses/status"]
    verbs: ["get", "list", "watch"]
  - apiGroups: ["", "extensions"]
    resources: ["secrets"]
    resourceNames: ["bigip-login"]
    verbs: ["get", "list", "watch"]
---
kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name:
    load-balancer-f5-clusterrole
rules:
  - apiGroups: [""]
    resources: ["events", "nodes"]
    verbs: ["get", "list", "watch"]
  - apiGroups: [""]
    resources: ["services", "services/status"]
    verbs: ["get", "list", "watch", "patch", "update"]
  - apiGroups: [""]
    resources: ["configmaps"]
    verbs: ["get", "list", "watch",  "create", "patch", "delete"]
EOF

שלב 2. החלת התבניות על אשכול משתמשים

‫
kubectl --kubeconfig USER_CLUSTER_KUBECONFIG apply -f templates.yaml