【问题标题】:Kubernetes | Expose HTTPS serviceKubernetes |公开 HTTPS 服务
【发布时间】:2020-04-07 19:55:20
【问题描述】:

我是 Kubernetes 平台的新手,尝试启用 Kubernetes 平台中部署的 tomcat Web 应用程序的 HTTPS 安全连接。我对与部署、服务和入口控制器有关的 manifest.yml 感到困惑。

---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: tomcat-webapp
spec:
  selector:
    matchLabels:
      app: tomcat-webapp
  replicas: 1
  template:
    metadata:
      labels:
        app: tomcat-webapp
    spec:
      containers:
        - name: tomcat-webapp
          image: registry.central/*****
          imagePullPolicy: Always
          securityContext:
            runAsUser: 13113
            runAsGroup: 602
          ports:
            - containerPort: 8080
          env:
            - name: JAVA_OPTS
              value: "-Xms128M -Xmx256M -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=256m"
            - name: CATALINA_OPTS
              value: "-Djavax.net.ssl.trustStore=/opt/apache-tomcat-8.5.32/webapps/ROOT/tomcat.jks -Djavax.net.ssl.trustStorePassword=****"
---
apiVersion: v1
kind: Service
metadata:
  name: tomcat-webapp
  labels:
    app: tomcat-webapp
spec:
  ports:
    - port: 80
      targetPort: 8080
      #nodePort: 30010
      protocol: TCP
      name: http
  selector:
    app: tomcat-webapp
---
---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: tomcat-webapp
spec:
  rules:
    - host: "tomcat-webapp.apps.net"
      http:
        paths:
          - path: /
            backend:
              serviceName: tomcat-webapp
              servicePort: 80
  tls:
    - hosts:
        # dont forget to update this url too
        - "tomcat-webapp.apps.net"

所以我是否还必须在部署中指定端口 8443(Https 端口)(在端口下:-containerPort:8080)服务(如端口:-端口:80 目标端口:8080 协议:TCP 名称:http)和入口(在backend:serviceName: tomcat-webapp servicePort: 80) ?

【问题讨论】:

    标签: ssl tomcat kubernetes https


    【解决方案1】:

    保持简单:

    apiVersion: v1
    kind: Service
    metadata:
      name: tomcat-webapp
      labels:
        app: tomcat-webapp
    spec:
      ports:
        - port: 8080
      selector:
        app: tomcat-webapp
    ---
    apiVersion: extensions/v1beta1
    kind: Ingress
    metadata:
      name: tomcat-webapp
    spec:
      rules:
        - host: "tomcat-webapp.apps.net"
          http:
            paths:
              - path: /
                backend:
                  serviceName: tomcat-webapp
                  servicePort: 8080
      tls:
        - hosts:
            - "tomcat-webapp.apps.net"`
    

    据我从您的部署配置中了解到,您的 Java 应用程序在端口 8080 上运行,并且需要 https 流量。这不适用于上述 Ingress 配置 - 您的 Java 应用程序应侦听端口 8080 并期望 http 流量。

    如果您真的希望您的 Java 应用程序监听 HTTPS,您可以通过以下方式配置 Ingress:

    apiVersion: extensions/v1beta1
    kind: Ingress
    metadata:
      name: tomcat-webapp
      annotations:
        kubernetes.io/ingress.class: "nginx"
        nginx.ingress.kubernetes.io/backend-protocol: "HTTPS"
    ... # the rest is the same
    

    【讨论】:

    • 好的..非常感谢您的回复..@David Molnar..如果我从浏览器外部连接到此服务到集群,如tomcat-webapp.apps.net,我是否必须将目标端口 8443 定义为端口 8443在我的服务中。?
    • 我认为在您的服务中定义port: 8443 就足够了。
    猜你喜欢
    • 2019-01-10
    • 2019-01-05
    • 1970-01-01
    • 2021-12-21
    • 2019-09-26
    • 2019-01-04
    • 2018-08-19
    • 2020-03-09
    • 1970-01-01
    相关资源
    最近更新 更多