如何配置入口到 jelastic 上托管的 kubernetes 中的服务?
How to configure ingress to a service in kubernetes hosted on jelastic?
事情是这样的。我像这样在我的 jelastic 帐户上安装了一个 kubernetes 集群:
然后,我想在集群外部暴露一个服务。 HelloWorld 在集群上运行 out-of-the-box,因此我认为我可以轻松地将其转换为我的需要。安装集群后,浏览
my-helloworld-test.my-jelastic-provider.com
工作得很好,即我看到了带有样式的 hello world html 页面。
现在,在我的未来use-cases,我想通过
访问我的服务
my-helloworld-test.my-jelastic-provider.com/hello
或
hello.my-helloworld-test.my-jelastic-provider.com
即我想为我的服务或子域设置路径。我收集到我需要定义一个 Ingress 来实现它。我已将 hello-kubernetes
服务配置更改为:
kind: Service
apiVersion: v1
metadata:
name: hello-kubernetes
namespace: default
spec:
ports:
- protocol: TCP
port: 80
targetPort: 8080
selector:
app: hello-kubernetes
type: ClusterIP
sessionAffinity: None
externalTrafficPolicy: Cluster
服务路径
我尝试按照入口配置来定义我的服务的路径:
kind: Ingress
apiVersion: extensions/v1beta1
metadata:
name: helloworld
namespace: default
annotations:
kubernetes.io/ingress.class: nginx
nginx.ingress.kubernetes.io/rewrite-target: /
nginx.ingress.kubernetes.io/ssl-redirect: 'false'
spec:
rules:
- http:
paths:
- path: /hello
backend:
serviceName: hello-kubernetes
servicePort: 80
目标是浏览
my-helloworld-test.my-jelastic-provider.com/hello
显示 pre-deployed helloworld 应用程序,而不是
my-helloworld-test.my-jelastic-provider.com
我可以编写 helloworld 应用程序,使其基础 url 成为 /hello
,但我从几个博客中了解到,可以通过 kubernetes 注释实现这种情况。特别是,注释 nginx.ingress.kubernetes.io/rewrite-target
似乎会有所帮助,但我无法完全实现它。确实,当我浏览 /hello
路径时,上面的配置向我展示了 helloworld 应用程序,但未设置样式:
如何实现造型?
要服务的子域
该服务的另一个性感的可能性是在浏览时显示
hello.my-helloworld-test.my-jelastic-provider.com
即作为我的 jelastic 环境的子域。我试过这个配置但没有成功:
kind: Ingress
apiVersion: extensions/v1beta1
metadata:
name: jenkins
namespace: default
annotations:
kubernetes.io/ingress.class: nginx
nginx.ingress.kubernetes.io/ssl-redirect: 'false'
spec:
rules:
- http:
paths:
- host: hello.my-helloworld-test.my-jelastic-provider.com
path: /
backend:
serviceName: hello-kubernetes
servicePort: 80
我需要对我的 jelastic 环境做些什么才能使上述主机可浏览并展示 helloworld 应用程序?
Kubernetes 配置
Client Version: version.Info{Major:"1", Minor:"15", GitVersion:"v1.15.6", GitCommit:"7015f71e75f670eb9e7ebd4b5749639d42e20079", GitTreeState:"archive", BuildDate:"2019-11-19T09:00:01Z", GoVersion:"go1.12.12", Co
mpiler:"gc", Platform:"linux/amd64"}
Server Version: version.Info{Major:"1", Minor:"15", GitVersion:"v1.15.6", GitCommit:"7015f71e75f670eb9e7ebd4b5749639d42e20079", GitTreeState:"archive", BuildDate:"2019-11-19T08:45:41Z", GoVersion:"go1.12.12", Co
mpiler:"gc", Platform:"linux/amd64"}
关于 jelastic v.5.7.
atm 似乎有 2 个不同的问题
- 您确定该域
hello.my-helloworld-test.my-jelastic-provider.com 正在关注一个
正确的IP?可以将自定义子域添加到
环境,然后将它们用于入口规则,但该选项
(自定义子域)现在仅可通过 API
- nginx.ingress.kubernetes.io/rewrite-target 的注释参数不正确,如果你使用 nginx 入口控制器试试这个
kind: Ingress
apiVersion: extensions/v1beta1
metadata:
name: helloworld
namespace: default
annotations:
kubernetes.io/ingress.class: nginx
nginx.ingress.kubernetes.io/rewrite-target: /
nginx.ingress.kubernetes.io/ssl-redirect: 'false'
spec:
rules:
- http:
paths:
- path: /hello(/|$)(.*)
backend:
serviceName: hello-kubernetes
servicePort: 80
更新:
我们还与 Laurent Michel 一起检查了该问题,发现问题是由应用程序中的绝对 URI 引起的,因此重写未应用于 CSS/images。最简单的解决方案 - 应用两个具有不同注释的入口规则(一个有重写,一个没有)。更高级和正确的方法 - 将此类应用程序转移到单独的子域,以便 URI 可以保持不变。
事情是这样的。我像这样在我的 jelastic 帐户上安装了一个 kubernetes 集群:
然后,我想在集群外部暴露一个服务。 HelloWorld 在集群上运行 out-of-the-box,因此我认为我可以轻松地将其转换为我的需要。安装集群后,浏览
my-helloworld-test.my-jelastic-provider.com
工作得很好,即我看到了带有样式的 hello world html 页面。
现在,在我的未来use-cases,我想通过
访问我的服务my-helloworld-test.my-jelastic-provider.com/hello
或
hello.my-helloworld-test.my-jelastic-provider.com
即我想为我的服务或子域设置路径。我收集到我需要定义一个 Ingress 来实现它。我已将 hello-kubernetes
服务配置更改为:
kind: Service
apiVersion: v1
metadata:
name: hello-kubernetes
namespace: default
spec:
ports:
- protocol: TCP
port: 80
targetPort: 8080
selector:
app: hello-kubernetes
type: ClusterIP
sessionAffinity: None
externalTrafficPolicy: Cluster
服务路径
我尝试按照入口配置来定义我的服务的路径:
kind: Ingress
apiVersion: extensions/v1beta1
metadata:
name: helloworld
namespace: default
annotations:
kubernetes.io/ingress.class: nginx
nginx.ingress.kubernetes.io/rewrite-target: /
nginx.ingress.kubernetes.io/ssl-redirect: 'false'
spec:
rules:
- http:
paths:
- path: /hello
backend:
serviceName: hello-kubernetes
servicePort: 80
目标是浏览
my-helloworld-test.my-jelastic-provider.com/hello
显示 pre-deployed helloworld 应用程序,而不是
my-helloworld-test.my-jelastic-provider.com
我可以编写 helloworld 应用程序,使其基础 url 成为 /hello
,但我从几个博客中了解到,可以通过 kubernetes 注释实现这种情况。特别是,注释 nginx.ingress.kubernetes.io/rewrite-target
似乎会有所帮助,但我无法完全实现它。确实,当我浏览 /hello
路径时,上面的配置向我展示了 helloworld 应用程序,但未设置样式:
如何实现造型?
要服务的子域
该服务的另一个性感的可能性是在浏览时显示
hello.my-helloworld-test.my-jelastic-provider.com
即作为我的 jelastic 环境的子域。我试过这个配置但没有成功:
kind: Ingress
apiVersion: extensions/v1beta1
metadata:
name: jenkins
namespace: default
annotations:
kubernetes.io/ingress.class: nginx
nginx.ingress.kubernetes.io/ssl-redirect: 'false'
spec:
rules:
- http:
paths:
- host: hello.my-helloworld-test.my-jelastic-provider.com
path: /
backend:
serviceName: hello-kubernetes
servicePort: 80
我需要对我的 jelastic 环境做些什么才能使上述主机可浏览并展示 helloworld 应用程序?
Kubernetes 配置
Client Version: version.Info{Major:"1", Minor:"15", GitVersion:"v1.15.6", GitCommit:"7015f71e75f670eb9e7ebd4b5749639d42e20079", GitTreeState:"archive", BuildDate:"2019-11-19T09:00:01Z", GoVersion:"go1.12.12", Co
mpiler:"gc", Platform:"linux/amd64"}
Server Version: version.Info{Major:"1", Minor:"15", GitVersion:"v1.15.6", GitCommit:"7015f71e75f670eb9e7ebd4b5749639d42e20079", GitTreeState:"archive", BuildDate:"2019-11-19T08:45:41Z", GoVersion:"go1.12.12", Co
mpiler:"gc", Platform:"linux/amd64"}
关于 jelastic v.5.7.
atm 似乎有 2 个不同的问题
- 您确定该域 hello.my-helloworld-test.my-jelastic-provider.com 正在关注一个 正确的IP?可以将自定义子域添加到 环境,然后将它们用于入口规则,但该选项 (自定义子域)现在仅可通过 API
- nginx.ingress.kubernetes.io/rewrite-target 的注释参数不正确,如果你使用 nginx 入口控制器试试这个
kind: Ingress
apiVersion: extensions/v1beta1
metadata:
name: helloworld
namespace: default
annotations:
kubernetes.io/ingress.class: nginx
nginx.ingress.kubernetes.io/rewrite-target: /
nginx.ingress.kubernetes.io/ssl-redirect: 'false'
spec:
rules:
- http:
paths:
- path: /hello(/|$)(.*)
backend:
serviceName: hello-kubernetes
servicePort: 80
更新: 我们还与 Laurent Michel 一起检查了该问题,发现问题是由应用程序中的绝对 URI 引起的,因此重写未应用于 CSS/images。最简单的解决方案 - 应用两个具有不同注释的入口规则(一个有重写,一个没有)。更高级和正确的方法 - 将此类应用程序转移到单独的子域,以便 URI 可以保持不变。