k8s-ingress使应用程序受https保护

时间:2019-03-02 09:35:42

标签: amazon-web-services kubernetes google-cloud-platform kubernetes-ingress nginx-ingress

我有int i=0; ... for (i=0; i<...) 应用(Web api),该应用首先通过k8s公开(我已经使用端口转发来运行它,并且它按预期运行)

NodePort

一样运行

比我创建的localhost:8080/api/v1/users类型为service的{​​{1}}更加暴露在外面,它可以正常工作

例如LoadBalancer

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 ,并且在阅读了有关该主题的内容后,我们决定为其使用 ingress

这就是我所做的

secure

现在我要运行它

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来运行应用程序,请提出建议?

1 个答案:

答案 0 :(得分:2)

在我看来,您正在为类型服务使用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,并将流量转发到正在侦听端口8080的fzr吊舱。

但是,您正在监听端口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

的更多信息