我一直在尝试在同一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-dummyservice
和projectX-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会自动保持计算引擎负载均衡器与给定的配置一致,因此在计算引擎端对负载均衡器进行的任何手动更改都会在一段时间后被覆盖。