繁体   English   中英

尽管创建了入口资源,但未创建 GCE LoadBalancer

[英]GCE LoadBalancer not being created despite ingress resource creation

我正在 GKE 上安装官方jenkins helm chart

我正在启用Ingress因此应应用相应的模板并创建资源。

根据官方 GKE 文档

当您创建 Ingress 时,GKE Ingress 控制器会根据 Ingress 和关联服务中的信息创建和配置 HTTP(S) 负载均衡器。 此外,负载均衡器会获得一个稳定的 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: ""

这是为什么?

曾经尝试都nginxgcekubernetes.io/ingress.class标注值。

edit_1 :似乎启用了HTTP Load Balancing Add On。

在此处输入图片说明

然而,最奇怪的部分是以下内容:

▶ 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

编辑_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兼容性问题后,结果证明 ingress 没有生成任何事件

▶ 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 :使用@Arghya Sadhu 评论中指出的正确注释启用实际 GCE 入口后,我在入口描述中看到以下错误

警告在评估入口规范时翻译 2s(x11 over 7s)负载均衡器错误:服务“jenkins/jenkins-inception”的类型为“ClusterIP”,预期为“NodePort”或“LoadBalancer”

然而,这与官方jenkins helm charts 的以下建议相矛盾:

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

edit_6 :入口设法获得公共 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_7jenkins-inception服务的yaml

▶ 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: {}

在 Ingress 上运行 describe。 如果您看到创建/添加事件,则说明集群中有一个 Ingress 控制器正在运行,否则,您可能在 GKE 集群上禁用了 HttpLoadBalancing(GKE Ingress Controller) 插件

编辑1:

您在 kubernetes 服务器和 kubectl 之间存在版本不兼容。 您可以通过运行以下命令来检查客户端和服务器版本。 检查此问题以获取详细信息。

kubectl version

编辑2:

你要么不应该有注释kubernetes.io/ingress.class或者如果你有它需要是kubernetes.io/ingress.class: gce

编辑3:

根据谷歌云文档,jenkins-inception 服务的服务类型需要是 NodePort 类型

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM