- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个带有 NGINX 入口 Controller 的 Kubernetes 集群。在集群中我部署了一个 Gitea荚。 Web UI 和 HTTPS 访问通过 Ingress 对象公开,如下所示:
---
kind: Service
apiVersion: v1
metadata:
name: gitea-service
namespace: gitea-repo
spec:
selector:
app: gitea
ports:
- name: gitea-http
port: 3000
- name: gitea-ssh
port: 22
---
kind: Ingress
apiVersion: networking.k8s.io/v1
metadata:
name: git-tls
namespace: gitea-repo
annotations:
cert-manager.io/cluster-issuer: "letsencrypt-prod"
spec:
tls:
- hosts:
- git.foo.com
secretName: tls-gitea
rules:
- host: git.foo.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: gitea-service
port:
number: 3000
这适用于 HTTPS。
但 Gitea 还通过端口 22 提供 SSH 访问。我的问题是,我如何告诉 NGINX Ingress Controller 将端口 22 也路由到我的 pod?
据我所知,我应该用类似的东西修补我的 NGINX Controller 部署:
spec:
template:
spec:
containers:
- name: controller
# defind cusotm tcp/udp configmap
args:
- --tcp-services-configmap=$(POD_NAMESPACE)/tcp-configmap-giteassh
ports:
- name: ssh
containerPort: 22
protocol: TCP
并提供指向我的 gitea 服务的配置映射:
apiVersion: v1
kind: ConfigMap
metadata:
name: tcp-configmap-giteassh
namespace: ingress-nginx
data:
22: "gitea-repo/gitea-service:22"
我现在是否还需要在我的 Gitea POD 中进行额外的 Ingress 配置?
我想知道这是否是正确的方法。为什么我被迫在 NGINX Controller 中定义它,而不是像我为 HTTP 所做的那样在我的 POD 命名空间中定义它?这是否意味着对于每个暴露 HTTP 以外的 TCP 端口的 POD,我必须调整我的 Ingress NGINX Controller ?
最佳答案
我决定通过添加更多细节和解释来改进我的答案。
我找到了你的 blog post其中包含重现此问题所需的所有信息。
在您的示例中,您需要TCP 流量 通过端口 22
(是TCP协议(protocol))
NGINX Ingress Controller 不支持 TCP 协议(protocol),因此需要额外的配置,可以在 documentation 中找到。 .
您可以按照以下步骤公开 TCP 服务:
ConfigMap
具有指定的 TCP 服务配置。--tcp-services-configmap
Ingress Controller 配置的标志。22
在Service
为 Ingress 定义。广告 1。 我们需要创建一个 ConfigMap
使用作为要使用的外部端口的键和指示要公开的服务的值(格式为 <namespace/service name>:<service port>:[PROXY]:[PROXY]
)。
注意:您可能需要更改 Namespace
取决于 NGINX Ingress Controller 的部署位置。
$ cat ingress-nginx-tcp.yml
apiVersion: v1
kind: ConfigMap
metadata:
name: ingress-nginx-tcp
namespace: default
data:
"22": gitea-repo/gitea-service:22
广告 2。 创建 ConfigMap
之后, 我们可以使用 --tcp-services-configmap
指向它Ingress Controller 配置中的标志。
注意:此外,如果您想在端口定义中使用名称(例如 22-tcp
),然后在 targetPort
中引用此名称一个服务的属性,你需要定义端口22
(参见:Defining a Service 文档)。
$ kubectl get deployment ingress-nginx-controller -oyaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: ingress-nginx-controller
namespace: default
spec:
...
template:
...
spec:
containers:
- args:
- /nginx-ingress-controller
- --tcp-services-configmap=$(POD_NAMESPACE)/ingress-nginx-tcp
...
广告 3. 然后我们需要公开端口 22
在为 Ingress 定义的服务中。
$ kubectl get svc -oyaml ingress-nginx-controller
apiVersion: v1
kind: Service
metadata:
name: ingress-nginx-controller
namespace: default
spec:
ports:
- name: 22-tcp
nodePort: 30957
port: 22
protocol: TCP
targetPort: 22
...
type: LoadBalancer
...
最后,我们可以通过在命令行上创建一个新的存储库来检查它是否按预期工作:
注意:我们需要一个 gitea 用户,该用户具有与此帐户关联的正确 SSH key 。
$ git add README.md
$ git commit -m "first commit"
[master (root-commit) c6fa042] first commit
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 README.md
$ git remote add origin git@<PUBLIC_IP>:<USERNAME>/repository.git
$ git push -u origin master
Enumerating objects: 3, done.
Counting objects: 100% (3/3), done.
Writing objects: 100% (3/3), 211 bytes | 211.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0)
remote: . Processing 1 references
remote: Processed 1 references in total
To <PUBLIC_IP>:<USERNAME>/repository.git
* [new branch] master -> master
Branch 'master' set up to track remote branch 'master' from 'origin'.
此外,我们可以登录到 NGINX Ingress Controller Pod 并检查它是否正在监听端口 22
:
$ kubectl exec -it ingress-nginx-controller-784d4c9d9-jhvnm -- bash
bash-5.1$ netstat -tulpn | grep 22
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN -
tcp 0 0 :::22 :::* LISTEN -
关于nginx - 如何通过 NGINX Ingress Controller 暴露端口 22?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66367867/
我对 DBT 还很陌生,正在尝试探索如何进行曝光。我已经阅读了文档 ( https://docs.getdbt.com/docs/building-a-dbt-project/exposures ),
我对 DBT 还很陌生,正在尝试探索如何进行曝光。我已经阅读了文档 ( https://docs.getdbt.com/docs/building-a-dbt-project/exposures ),
这在Python中合法吗?似乎有效... 谢谢 # with these lines you not need global variables anymore if __name__ == '__m
我正在尝试使用 tomcat Docker 镜像打包一个 war 文件。我正在尝试在图像中公开 tomcat 端口以供外部访问。 这是我的docker文件 FROM tomcat8:3.0.0 C
我一直在尝试通过 ip 连接到 docker 容器,但再次失败。当我使用“docker inspect container-id”时,我得到了这个结果。 我的虚拟盒子默认设置是: 有人可以帮我解决这个
我知道要在 docker 容器中公开端口,您可以使用 -p标志(例如 -p 1-100:1-100 )。但是有没有一种很好的方法可以将大部分可能的端口从容器暴露给主机?例如,如果我在位于 VM 中的容
我正在开发一个带有 ktor 应用程序的 Kotlin,并且我使用暴露为 ORM。我有一个引用另一个表的表。这种关系是多对一的。前任: object Users : IdTable() { ov
我正在尝试学习 polymer ,并且正在尝试制作一个基本的消息传递框架。所以我创建了一个名为 messages-framework 的小 polymer 元素,它将显示消息,并在 3 秒后删除该消息
我的问题很简单也很笼统:当调用 RESTFUL API 时,无论是我的还是外部的,将 token 暴露在前端是否是常见做法/可以?例如,在 Google map api 的文档中,他们建议使用以下代码
我们有一个包含 1000 万条记录的数据库表。我们不想使用 auto_increment,因为那样会让我们的用户知道我们有多少条记录。我们不想将其暴露给我们的竞争对手。我看到的问题是使用 UUID 或
我有以下用户表对象和实体类: object UserTable : IntIdTable() { val name = varchar("name", 256) } class User(id
对于部署在 Google kubernetes 引擎上的基于微服务的示例架构,我需要帮助来验证我的理解: 我们知道服务应该对 pod 副本集的流量进行负载平衡。 当我们创建一个 nginx 入口 Co
String caminhoFoto = getExternalFilesDir(null) + "/"+ System.currentTimeMillis() +".jpg";
我目前正在编写一个用 Parcel js 打包的 TypeScript 模块化库。应用程序将使用该库来实现特定功能。消费应用程序/网页将在其 html 中添加对我的库的引用,例如。 我想在我的库中公
mongodb 生成的 ID 在您的所有文档中都是唯一的,将其暴露给客户端的风险是什么?就像我有一个 ID 为 12345676543 的用户名 James,将它暴露给 url 是明智的吗 examp
场景:假设攻击者通过对.apk文件进行逆向工程,获取了应用中使用的Push Registration Service的SENDER ID。攻击者开发了一个类似的虚假应用程序,它具有相同/不同的包名,并
当使用 Spring Boot starter 进行 graphql 时,数据获取时抛出的所有异常都在输出控制台中显示为“执行查询时的内部服务器错误”我希望我抛出的 e.message() 的 Gra
我正在尝试使用 Docker 运行 ASP.NET Core 应用程序,并且我想将外部 wwwroot 文件夹公开给容器,以便当我从外部对其进行更改时,它们会自动对我的应用程序可用。这可能吗,使用卷?
我构建了一个 WCF 服务,它为 Web 应用程序公开自身,它接受一个对象并在客户端机器上打印数据。在我的开发机器上运行良好,该服务在我安装它的任何机器上启动并运行。我可以在客户端机器的 Web 浏览
我似乎无法弄清楚这一点。我有一个使用 scikit-learn 训练的模型,保存到一个 .pkl 文件中,我想制作一个 API 来根据它进行预测。 我已经有了进行预测的代码,它在控制台/单元测试中运行
我是一名优秀的程序员,十分优秀!