k8s-ingress 使用 https 保护应用程序
k8s-ingress to make the application secured with https
我有 k8s
应用程序(Web api),它首先通过 NodePort
公开(我使用端口转发到 运行 它并且按预期工作)
运行 喜欢 localhost:8080/api/v1/users
我创建了一个类型为 LoadBalancer
的 service
以将其暴露在外面,按预期工作。
例如http://myhost:8080/api/v1/users
apiVersion: v1
kind: Service
metadata:
name: fzr
labels:
app: fzr
tier: service
spec:
type: LoadBalancer
ports:
- port: 8080
selector:
app: fzr
现在我们需要实现它 secure
,在阅读了这个主题之后我们决定使用 ingress。
这就是我所做的
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: ctr-ingress
selector:
app: fzr
spec:
ports:
- name: https
port: 443
targetPort: https
现在我想运行喜欢
https://myhost:443/api/v1/users
这是不工作,我无法运行端口443
作为https
的应用程序,请指教?
在我看来,您正在使用类型服务的 yaml 模板来部署您的入口,但并不正确。 targetPort
应该是一个数字端口,无论如何,我不认为 "https" 是一个正确的值(虽然我可能是错的)。
像这样:
apiVersion: v1
kind: Service
type: NodePort
metadata:
name: fzr-ingress
spec:
type: NodePort
selector:
app: fzr
ports:
- protocol: TCP
port: 443
targetPort: 8080
现在你有一个节点端口服务监听 443 并将流量转发到你的 fzr pods 监听端口 8080。
但是,您正在侦听端口 443 本身并不能保护您的应用程序。要加密流量,您需要一个 TLS 证书,您必须将其作为 secret
提供给入口。
如果这看起来有点复杂(因为确实如此),您可以考虑从 helm chart
部署 Nginx 入口
在任何情况下,您的入口 yaml 都将如下所示:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
annotations:
kubernetes.io/ingress.class: nginx
name: gcs-ingress
namespace: default
spec:
rules:
- host: myhost
http:
paths:
- backend:
serviceName: fzr
servicePort: 443
path: /api/v1/users
tls:
- hosts:
- myhost
secretName: myhosts-tls
有关如何配置此 here
的详细信息
我有 k8s
应用程序(Web api),它首先通过 NodePort
公开(我使用端口转发到 运行 它并且按预期工作)
运行 喜欢 localhost:8080/api/v1/users
我创建了一个类型为 LoadBalancer
的 service
以将其暴露在外面,按预期工作。
例如http://myhost:8080/api/v1/users
apiVersion: v1
kind: Service
metadata:
name: fzr
labels:
app: fzr
tier: service
spec:
type: LoadBalancer
ports:
- port: 8080
selector:
app: fzr
现在我们需要实现它 secure
,在阅读了这个主题之后我们决定使用 ingress。
这就是我所做的
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: ctr-ingress
selector:
app: fzr
spec:
ports:
- name: https
port: 443
targetPort: https
现在我想运行喜欢
https://myhost:443/api/v1/users
这是不工作,我无法运行端口443
作为https
的应用程序,请指教?
在我看来,您正在使用类型服务的 yaml 模板来部署您的入口,但并不正确。 targetPort
应该是一个数字端口,无论如何,我不认为 "https" 是一个正确的值(虽然我可能是错的)。
像这样:
apiVersion: v1
kind: Service
type: NodePort
metadata:
name: fzr-ingress
spec:
type: NodePort
selector:
app: fzr
ports:
- protocol: TCP
port: 443
targetPort: 8080
现在你有一个节点端口服务监听 443 并将流量转发到你的 fzr pods 监听端口 8080。
但是,您正在侦听端口 443 本身并不能保护您的应用程序。要加密流量,您需要一个 TLS 证书,您必须将其作为 secret
提供给入口。
如果这看起来有点复杂(因为确实如此),您可以考虑从 helm chart
部署 Nginx 入口在任何情况下,您的入口 yaml 都将如下所示:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
annotations:
kubernetes.io/ingress.class: nginx
name: gcs-ingress
namespace: default
spec:
rules:
- host: myhost
http:
paths:
- backend:
serviceName: fzr
servicePort: 443
path: /api/v1/users
tls:
- hosts:
- myhost
secretName: myhosts-tls
有关如何配置此 here
的详细信息