Dans la version 1.29 et les versions antérieures, les clusters d'utilisateurs créés avec la configuration loadBalancer.f5BigIP déployaient des contrôleurs F5 fournis par Google. Étant donné que ces contrôleurs présentent des limites, Google Distributed Cloud bloque la création de clusters avec la configuration loadBalancer.f5BigIP
à partir de la version 1.30. À la place, les nouveaux clusters doivent être configurés pour l'équilibrage de charge manuel, et vous devez déployer vous-même les contrôleurs F5.
Cette page explique comment déployer les anciens contrôleurs F5 fournis par Google pour un cluster d'utilisateurs créé avec Google Distributed Cloud. Bien que le déploiement de ces contrôleurs soit pris en charge, nous vous recommandons d'installer le dernier contrôleur CIS de F5.
Prérequis :
Vous disposez d'un cluster d'utilisateurs avec la configuration manualLB.
Vous disposez d'un serveur F5 pour le cluster d'utilisateur et vous connaissez ses informations de connexion.
Vous souhaitez automatiser le processus de configuration des serveurs virtuels dans F5 pour les services Kubernetes de type LoadBalancer dans votre cluster utilisateur.
Étape 1 : Préparer des modèles pour les contrôleurs
Obtenez les informations F5 et générez les modèles.
Obtenir des informations sur F5
Définissez les variables d'espace réservé suivantes avec les informations de connexion du serveur F5:
Nom d'utilisateur F5:
USERNAME
Mot de passe F5:
PASSWORD
Adresse F5:
ADDRESS
Partition F5:
PARTITION
Définissez
SnatPoolName
. Si vous n'utilisez pas SNAT, laissez la variable d'espace réservé vide:SnatPoolName: SNAT_POOL_NAME
Obtenir les informations de registre et de version
Obtenez la ressource personnalisée
onpremusercluster
:kubectl --kubeconfig USER_CLUSTER_KUBECONFIG get onpremusercluster -oyaml -n kube-system
Copiez les champs suivants de la ressource personnalisée
onpremusercluster
:Registry: REGISTRY (onpremusercluster.spec.registry.address) ImageTag: IMAGE_TAG (onpremusercluster.spec.gkeOnPremVersion)
Générer les modèles
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
Étape 2 : Appliquer les modèles au cluster d'utilisateur
kubectl --kubeconfig USER_CLUSTER_KUBECONFIG apply -f templates.yaml