我有一个 kubernetes 设置,如下所示:
nginx 入口 -> 负载均衡器 -> nginx 应用程序
在获得www .foo.com的 SSL 证书后,我已将它作为秘密安装在我的 nginx 入口中,并且它按预期工作 - 流量www.foo.com被重定向到该https版本,并且浏览器显示安全连接指示器。伟大的。
什么也没有一帆风顺,然而,越来越入口重定向非www网站流量的WWW版本。我试过使用kubernetes.io/from-to-www-redirect: "true",但它似乎没有做任何事情 - 导航到foo.com不会将我重定向到url的www版本,而是将我带到我网站的不安全版本,或者default backend - 404根据是否将我导航到我foo.com作为主机包含在我的入口中,它有自己的路径。
通过将以下内容添加到我的实际应用程序的 nginx 配置中,我已经能够设置不完整的重定向 -
server {
listen 80;
server_name foo.com;
return 301 http://www.foo.com$request_uri;
}
Run Code Online (Sandbox Code Playgroud)
更新: from-to-www-redirect有效;你只需要参考它nginx.ingress.kubernetes.io而不是kubernetes.io像我一样。但是,这仅适用于foo.com-https://foo.com明确输入会导致浏览器显示安全警告,并且不会重定向到正确的 URL https://www.foo.com。
这是我当前的 nginx 入口配置:
apiVersion: extensions/v1beta1
kind: Ingress …Run Code Online (Sandbox Code Playgroud) 假设我有一个如下所示的接口A:
interface A {
prop1: string
prop2: string
}
Run Code Online (Sandbox Code Playgroud)
我像这样初始化对象obj:
const obj: Partial<A> = { prop1: 'xyz' }
Run Code Online (Sandbox Code Playgroud)
有没有办法将obj 强制转换为A并自动设置任何未在obj 中定义但在A 中需要的属性为null或undefined?如果可能,我只想在变量的初始化时使用部分,并坚持函数参数中的“完整”类型。
我不能把A改成一个班级。
我正在尝试容器化一个创建 .STL 文件快照的 Node 应用程序。这个应用程序是通过xvfb-run提供一个模拟 GUI 来启动的,它可以在其中生成所述快照,如果我只在没有容器的情况下运行应用程序,它就可以工作,但是当我尝试将它容器化时,它会xvfb-run挂起。容器控制台中没有打印任何内容,没有日志,并且添加-e /dev/stdout到xvfb-run不会输出任何内容。
这是我的 dockerfile:
FROM debian:latest AS build-env
WORKDIR /app
COPY src ./src
COPY tsconfig.json ./
COPY package.json ./
RUN apt-get update
RUN apt-get install -y curl
RUN apt-get install -my wget gnupg
RUN curl -sL https://deb.nodesource.com/setup_8.x | bash
RUN apt-get install -y nodejs build-essential libxi-dev xvfb libgl1-mesa-dev libglu1-mesa-dev libglew-dev
RUN npm install .
RUN npm install -g typescript
RUN tsc
EXPOSE 3000
CMD ["xvfb-run", "node", …Run Code Online (Sandbox Code Playgroud) 我在Google Cloud平台上托管了一个Web应用程序,该应用程序位于负载平衡器的后面,负载平衡器本身位于入口的后面。入口使用SSL证书设置,并按预期接受HTTPS连接,但存在一个问题:我无法使它将非HTTPS连接重定向到HTTPS。例如,如果我使用URL http://foo.com或连接到它foo.com,它将直接转到foo.com,而不是https://foo.com我期望的那样。连接到https://foo.com显式产生所需的HTTPS连接。
我已经尝试了所有可以想到的注释和配置,但是它固执地拒绝了,尽管甚至没有必要,因为文档暗示如果指定了TLS,重定向是自动的。我是从根本上误解了入口资源是如何工作的吗?
更新:是否有必要在GCP上手动安装 Nginx Ingress?现在我考虑了一下,我一直在理所当然地将其在平台上的可用性,但是在遇到了有关如何在Google Container Engine上安装nginx ingress的信息之后,我意识到答案可能比我想象的要简单得多。将进一步调查。
Kubernetes版本:1.8.5-gke.0
入口YAML文件:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: https-ingress
annotations:
kubernetes.io/ingress.class: "nginx"
ingress.kubernetes.io/ssl-redirect: "true"
ingress.kubernetes.io/secure-backends: "true"
ingress.kubernetes.io/force-ssl-redirect: "true"
spec:
tls:
- hosts:
- foo.com
secretName: tls-secret
rules:
- host: foo.com
http:
paths:
- path: /*
backend:
serviceName: foo-prod
servicePort: 80
Run Code Online (Sandbox Code Playgroud)
kubectl描述https-ingress输出
Name: https-ingress
Namespace: default
Address:
Default backend: default-http-backend:80 (10.56.0.3:8080)
TLS:
tls-secret terminates foo.com
Rules:
Host Path …Run Code Online (Sandbox Code Playgroud)