GCE LoadBalancer не создается несмотря на создание входного ресурса - PullRequest
0 голосов
/ 25 января 2020

Я устанавливаю официальный jenkins шлем график на GKE.

Я разрешаю Ingress, поэтому соответствующий шаблон должен быть применен и ресурс создан.

В соответствии с официальной документацией GKE :

При создании Ingress контроллер входа GKE создает и конфигурирует Балансировщик нагрузки HTTP (S) в соответствии с информацией в Ingress и связанных сервисах. Кроме того, балансировщику нагрузки присваивается стабильный IP-адрес, который можно связать с доменным именем.

Однако в моем случае этого не происходит; вход не получает внешний IP-адрес, связанный с ним:

▶ k get ingress --all-namespaces
NAMESPACE   NAME                HOSTS   ADDRESS   PORTS   AGE
jenkins     jenkins-inception   *                 80      82s

Вот фактический ресурс Ingress:

▶ k get ingress --all-namespaces -o yaml
apiVersion: v1
items:
- apiVersion: extensions/v1beta1
  kind: Ingress
  metadata:
    annotations:
      kubernetes.io/ingress.class: nginx
    creationTimestamp: "2020-01-24T21:20:49Z"
    generation: 1
    labels:
      app.kubernetes.io/component: jenkins-master
      app.kubernetes.io/instance: jenkins-inception
      app.kubernetes.io/managed-by: Tiller
      app.kubernetes.io/name: jenkins
      helm.sh/chart: jenkins-1.9.16
    name: jenkins-inception
    namespace: jenkins
    resourceVersion: "15741661"
    selfLink: /apis/extensions/v1beta1/namespaces/jenkins/ingresses/jenkins-inception
    uid: 6461793e-3eef-11ea-a0a5-42010a790807
  spec:
    rules:
    - http:
        paths:
        - backend:
            serviceName: jenkins-inception
            servicePort: 8080
          path: /jenkins
  status:
    loadBalancer: {}
kind: List
metadata:
  resourceVersion: ""
  selfLink: ""

Почему это так?

Есть пробовал и nginx и gce в kubernetes.io/ingress.class значениях аннотации.

edit_1 : кажется, что HTTP Load Balancing Add On включен.

enter image description here

Самая странная часть, однако, следующая:

▶ k describe ingress jenkins-inception -n jenkins
Error from server (NotFound): the server could not find the requested resource

~                                                                                                                                         
▶ k get ingress jenkins-inception -n jenkins
NAME                HOSTS   ADDRESS   PORTS   AGE
jenkins-inception   *                 80      11h

edit_2 :

Client Version: version.Info{Major:"1", Minor:"15", GitVersion:"v1.15.0", GitCommit:"e8462b5b5dc2584fdcd18e6bcfe9f1e4d970a529", GitTreeState:"clean", BuildDate:"2019-06-19T16:40:16Z", GoVersion:"go1.12.5", Compiler:"gc", Platform:"darwin/amd64"}
Server Version: version.Info{Major:"1", Minor:"13+", GitVersion:"v1.13.11-gke.14", GitCommit:"56d89863d1033f9668ddd6e1c1aea81cd846ef88", GitTreeState:"clean", BuildDate:"2019-11-07T19:12:22Z", GoVersion:"go1.12.11b4", Compiler:"gc", Platform:"linux/amd64"}

edit_3 : После решения проблемы совместимости kubectl выясняется, что входные данные не генерируют никаких событий

▶ k describe ingress jenkins-inception -n jenkins
Name:             jenkins-inception
Namespace:        jenkins
Address:
Default backend:  default-http-backend:80 (10.8.32.33:8080)
Rules:
  Host  Path  Backends
  ----  ----  --------
  *
        /jenkins   jenkins-inception:8080 (10.8.33.87:8080)
Annotations:
  kubernetes.io/ingress.class:  nginx
Events:                         <none>

Существует ли командная строка для отображения включенных надстроек в кластере?

edit_4 : О дополнениях ..

▶ gcloud container clusters describe inception-cluster --zone us-east4-b | grep -i add -A 6
addonsConfig:
  horizontalPodAutoscaling: {}
  httpLoadBalancing: {}
  kubernetesDashboard:
    disabled: true
  networkPolicyConfig:
    disabled: true

edit_5 : После включения фактического входа GCE с правильной аннотацией, как указано в комментариях @Arghya Sadhu, я вижу следующую ошибку во входном описании

Предупреждение Перевести 2s (x11 через 7s) ошибка контроллера нагрузки балансировки при оценке входное значение c: служба «jenkins / jenkins-inception» имеет тип «ClusterIP», ожидаемый «NodePort» или «LoadBalancer»

Однако это противоречит следующей рекомендации из официальных jenkins рулевых карт:

  # For minikube, set this to NodePort, elsewhere use LoadBalancer
  # Use ClusterIP if your setup includes ingress controller

edit_6 : входу удалось получить публичные c IP:

  spec:
    rules:
    - http:
        paths:
        - backend:
            serviceName: jenkins-inception
            servicePort: 8080
          path: /jenkins
  status:
    loadBalancer:
      ingress:
      - ip: 12.234.543.111

Однако я Я не могу получить доступ к следующим путям:

https://12.234.543.111/jenkins
http://12.234.543.111/jenkins
https://12.234.543.111
http://12.234.543.111

edit_7 : yaml службы jenkins-inception

▶ k get svc jenkins-inception -o yaml
apiVersion: v1
kind: Service
metadata:
  creationTimestamp: "2020-01-25T12:40:14Z"
  labels:
    app.kubernetes.io/component: jenkins-master
    app.kubernetes.io/instance: jenkins-inception
    app.kubernetes.io/managed-by: Tiller
    app.kubernetes.io/name: jenkins
    helm.sh/chart: jenkins-1.9.16
  name: jenkins-inception
  namespace: jenkins
  resourceVersion: "16000964"
  selfLink: /api/v1/namespaces/jenkins/services/jenkins-inception
  uid: d5bfd760-3f6f-11ea-a0a5-42010a790807
spec:
  clusterIP: 10.8.59.184
  externalTrafficPolicy: Cluster
  ports:
  - name: http
    nodePort: 30361
    port: 8080
    protocol: TCP
    targetPort: 8080
  selector:
    app.kubernetes.io/component: jenkins-master
    app.kubernetes.io/instance: jenkins-inception
  sessionAffinity: None
  type: NodePort
status:
  loadBalancer: {}

1 Ответ

1 голос
/ 25 января 2020

Запустите описание на Ingress. Если вы видите события создания / добавления, у вас в кластере работает контроллер Ingress, в противном случае у вас, вероятно, отключено дополнение HttpLoadBalancing (GKE Ingress Controller) в вашем кластере GKE

Edit1:

У вас есть несовместимость версий между сервером kubernetes и kubectl. Вы можете проверить версию клиента и сервера, выполнив следующую команду. Проверьте этот выпуск для подробностей.

kubectl version

Edit2:

У вас не должно быть аннотации kubernetes.io/ingress.class или, если она у вас есть должен быть gce kubernetes.io/ingress.class: gce

Edit3:

В соответствии с облаком Google сделать c тип сервиса для нужд службы jenkins-inception быть типа NodePort

...