在计算引擎上使用GKE Ingress负载均衡器和服务

时间:2017-12-28 12:31:45

标签: kubernetes google-cloud-platform load-balancing google-kubernetes-engine

我一直在尝试在同一HTTP负载均衡器下的Google Kubernetes引擎和计算引擎VM上获得混合服务,以便在相同的公共静态IP和DNS别名下访问它们。我所挣扎的是让虚拟机上的服务可以访问。

我从https://github.com/kubernetes/ingress-gce/blob/master/README.md获得了基本解决方案,用已经存在的Deployment替换了ReplicationController(基本上在GKE集群上运行的主应用程序一侧添加了glbc)。

我一直在尝试应用https://stackoverflow.com/a/35446176/2745865中提出的解决方案,但为Jenkins实例创建的虚拟NodePort服务(在计算引擎VM中在群集外运行)仍然不健康。< / p>

在主应用程序部署容器下我有这个:

 - name: projectX-glbc
    image: gcr.io/google_containers/glbc:0.9.7
    livenessProbe:
      httpGet:
        path: /ping
        port: 8080
        scheme: HTTP
      initialDelaySeconds: 30
      timeoutSeconds: 5
    resources:
      limits:
        cpu: 100m
        memory: 100Mi
      requests:
        cpu: 100m
        memory: 50Mi
    args:
    - --apiserver-host=http://localhost:8080
    - --default-backend-service=default/projectX-test
    - --sync-period=300s

其他服务:

kind: Service
apiVersion: v1
metadata:
  name: projectX-jenkins-dummyservice
spec:
  type: NodePort
  ports:
  - protocol: TCP
    port: 80

---
kind: Endpoints
apiVersion: v1
metadata:
  name: projectX-jenkins-dummyservice
subsets:
  - addresses:
    - ip: 10.156.0.2 # this IP is the static IP of the Jenkins master VM
    ports:
    - name: jenkins-master-http
      protocol: TCP
      port: 80

---
kind: Service
apiVersion: v1
metadata:
  name: projectX-test
spec:
  type: LoadBalancer
  ports:
  - name: http
    port: 80
    targetPort: projectX-backend
    protocol: TCP
  selector:
    app: projectX
    role: backend
    env: test

---
kind: Ingress
apiVersion: extensions/v1beta1
metadata:
  name: projectX-test-ingress
  annotations:
    ingress.kubernetes.io/rewrite-target: /
    kubernetes.io/ingress.global-static-ip-name: "projectX-public-ip"
spec:
  backend:
    serviceName: projectX-test
    servicePort: 80
  rules:
  - host: projectX.domain.invalid
    http:
      paths:
      - path: /jenkins
        backend:
          serviceName: projectX-jenkins-dummyservice
          servicePort: 80

此配置的最终结果是可以访问公共IP上的主应用程序(以及上面显示为projectX.domain.invalid的DNS别名),但projectX-test-ingress保持不健康状态为詹金斯自动生成的后端服务,其中包含3个健康状态&#34; 0&#34;。此外,至少GUI在projectX-jenkins-dummyserviceprojectX-test下显示主要的应用程序Pod,即使它与Jenkins虚拟服务无关。主应用程序也会定期强制重启,这对我来说建议设置不是很正确......

问题是我做错了什么 - 或者我的理解不正确以及我想要完成的事情是不可能的(或者不应该完成)? < / p>

最初我们在Compute Engine上有一个手动构建的HTTP负载均衡器,但是由此我无法弄清楚如何包含来自Kubernetes集群的服务(但我只是寻求使用GCP GUI的解决方案)。例如https://stackoverflow.com/a/35447985/2745865似乎声称这可以在没有Kubernetes Ingress对象的情况下完成......

修改 我能想到的一个解决方案是丢弃NodePort projectX-jenkins-dummyservice以及projectX-test-ingress配置中对它的引用(我把根URL指向projectX-test以便在那里找到一些东西然后,从GUI手动更改Compute Engine负载均衡器,以便将/jenkins, /jenkins/*指向已为原始HTTP负载均衡器创建的原始projectX-jenkins-backend,而不是GKE后端。

这样我获得了所需的功能,但它是在GUI中应用yaml和手动工作的混合,如果有人需要重建它,可能会很麻烦...只有{{1文件将更加自包含。但是,由于GKE Ingress会自动保持计算引擎负载均衡器与给定的配置一致,因此在计算引擎端对负载均衡器进行的任何手动更改都会在一段时间后被覆盖。

0 个答案:

没有答案