In Version 1.29 und niedriger wurden in Nutzerclustern, die mit der
loadBalancer.f5BigIP
Konfiguration erstellt wurden, von Google bereitgestellte F5-Controller bereitgestellt. Da diese Controller
Einschränkungenhaben
,
blockiert Google Distributed Cloud ab Version 1.30 das Erstellen von Clustern mit der
loadBalancer.f5BigIP Konfiguration. Stattdessen müssen neue Cluster für
das manuelle Load-Balancing konfiguriert werden und Sie müssen
F5-Controller selbst bereitstellen.
Auf dieser Seite wird beschrieben, wie Sie die älteren von Google bereitgestellten F5-Controller für einen Nutzercluster bereitstellen, der mit Google Distributed Cloud erstellt wurde. Obwohl die Bereitstellung dieser Controller unterstützt wird, empfehlen wir Ihnen, den neuesten CIS-Controller von F5 zu installieren.
Voraussetzungen:
Sie haben einen Nutzercluster mit der manualLB Konfiguration.
Sie haben einen F5-Server für den Nutzercluster und kennen die Anmeldedaten.
Sie möchten den Prozess zum Konfigurieren virtueller Server in F5 für Kubernetes-Dienste vom Typ „LoadBalancer“ in Ihrem Nutzercluster automatisieren.
Schritt 1 Vorlagen für die Controller vorbereiten
Rufen Sie die F5-Informationen ab und generieren Sie die Vorlagen.
F5-Informationen abrufen
Legen Sie die folgenden Platzhaltervariablen mit den Anmeldedaten vom F5-Server fest:
F5-Nutzername:
USERNAMEF5-Passwort:
PASSWORDF5-Adresse:
ADDRESSF5-Partition:
PARTITION
Legen Sie
SnatPoolNamefest. Wenn Sie SNAT nicht verwenden, lassen Sie die Platzhaltervariable leer:SnatPoolName: SNAT_POOL_NAME
Registrierungs- und Versionsinformationen abrufen
Rufen Sie die benutzerdefinierte Ressource
onpremuserclusterab:kubectl --kubeconfig USER_CLUSTER_KUBECONFIG get onpremusercluster -oyaml -n kube-system
Kopieren Sie die folgenden Felder aus der benutzerdefinierten Ressource
onpremusercluster:Registry: REGISTRY (onpremusercluster.spec.registry.address) ImageTag: IMAGE_TAG (onpremusercluster.spec.gkeOnPremVersion)
Vorlagen generieren
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
Schritt 2 Vorlagen auf den Nutzercluster anwenden
kubectl --kubeconfig USER_CLUSTER_KUBECONFIG apply -f templates.yaml