버전 1.29 이하에서는 loadBalancer.f5BigIP 구성으로 만든 사용자 클러스터가 Google에서 제공하는 F5 컨트롤러를 배포했습니다. 이러한 컨트롤러에는 제한사항이 있으므로 버전 1.30 이상에서는 Google Distributed Cloud가 loadBalancer.f5BigIP
구성으로 클러스터를 만드는 것을 차단합니다. 대신 새 클러스터를 수동 부하 분산용으로 구성해야 하며 F5 컨트롤러를 직접 배포해야 합니다.
이 페이지에서는 Google Distributed Cloud로 만든 사용자 클러스터에 기존 Google 제공 F5 컨트롤러를 배포하는 방법을 보여줍니다. 이러한 컨트롤러를 배포하는 것이 지원되지만 F5의 최신 CIS 컨트롤러를 설치하는 것이 좋습니다.
기본 요건:
manualLB 구성이 적용된 사용자 클러스터가 있습니다.
사용자 클러스터의 F5 서버가 있고 로그인 정보가 있습니다.
사용자 클러스터의 LoadBalancer 유형 Kubernetes 서비스에 대해 F5에서 가상 서버를 구성하는 프로세스를 자동화하려고 합니다.
1단계. 컨트롤러의 템플릿 준비
F5 정보를 가져와 템플릿을 생성합니다.
F5 정보 가져오기
F5 서버의 로그인 정보로 다음 자리표시자 변수를 설정합니다.
F5 사용자 이름:
USERNAME
F5 비밀번호:
PASSWORD
F5 주소:
ADDRESS
F5 파티션:
PARTITION
SnatPoolName
를 설정합니다. SNAT를 사용하지 않는 경우 자리표시자 변수를 비워 둡니다.SnatPoolName: SNAT_POOL_NAME
레지스트리 및 버전 정보 가져오기
onpremusercluster
커스텀 리소스를 가져옵니다.kubectl --kubeconfig USER_CLUSTER_KUBECONFIG get onpremusercluster -oyaml -n kube-system
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