首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Curl与Kubernetes nginx Ingress #5116

使用Curl与Kubernetes nginx Ingress #5116
EN

Stack Overflow用户
提问于 2020-02-19 07:16:03
回答 1查看 3.5K关注 0票数 0

我通过nginx将身份验证配置为k8s中的特定服务。

它可以很好的工作在WUI。

我看到了一些例子

这也很好:

curl -v http://10.2.29.4/ -H 'Host: foo.bar.com' -u 'foo:bar'

但我需要关闭其他部分我的url同样。

例如/api/v1/上载

我用路径部署了第二入口:

代码语言:javascript
复制
spec:
  rules:
  - host: foo.bar.com
    http:
      paths:
      - backend:
          serviceName: service
          servicePort: 8000
        path: /api/v1/upload

如果没有nginx,我必须键入:

curl -XPOST 'file=@/file' http://10.2.29.4:8000/api/v1/upload -H "Authorization:key"

我需要如何尝试使用curl来隐藏真实的ip或端口并获得好的结果?

如果你能帮我弄清楚的话,我会非常感激的。

ingress1:

代码语言:javascript
复制
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: mobsf
  namespace: default
  labels:
    app: mobsf
#    env: dev
  annotations:
    nginx.ingress.kubernetes.io/auth-type: basic
    nginx.ingress.kubernetes.io/auth-secret: mobsf-basic-auth
    nginx.ingress.kubernetes.io/auth-realm: "Authentication Required"
spec:
  rules:
  - host: worker1.mydomain.local
    http:
      paths:
      - path: /
      - backend:
          serviceName: mobsf
          servicePort: 8000

入口2:

代码语言:javascript
复制
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: mobsf2
  namespace: default
  labels:
    app: mobsf2
#    env: dev
  annotations:
    nginx.ingress.kubernetes.io/auth-type: basic
    nginx.ingress.kubernetes.io/auth-secret: mobsf-basic-auth
    nginx.ingress.kubernetes.io/auth-realm: "Authentication Required"
spec:
  rules:
  - host: worker1.mydomain.local
    http:
      paths:
      - backend:
          serviceName: mobsf2
          servicePort: 8000
        path: /api/v1/

DNS检查(正确):

代码语言:javascript
复制
 nslookup worker1.mydomain.local
Server:         10.2.67.10
Address:        10.2.67.10#53

Name:   worker1.mydomain.local
Address: 10.2.67.203

服务:

代码语言:javascript
复制
kubectl get svc
NAME            TYPE           CLUSTER-IP      EXTERNAL-IP   PORT(S)          AGE
kubernetes      ClusterIP      10.233.0.1      <none>        443/TCP          159d
minio-service   LoadBalancer   10.233.32.19    <pending>     9001:30809/TCP   104d
mobsf           NodePort       10.233.18.34    <none>        8000:30426/TCP   8d
vault           NodePort       10.233.43.134   <none>        8200:30820/TCP   69

英灵:

代码语言:javascript
复制
 kubectl get ing
NAME     HOSTS                  ADDRESS   PORTS   AGE
mobsf    worker1.dev002.local             80      2d1h
mobsf2   worker1.dev002.local             80      23h
EN

回答 1

Stack Overflow用户

发布于 2020-02-20 08:54:33

在裸金属中,默认情况下安装不可能使用IngressLoadBalancer服务。您无法获得EXTERNAL-IP,如您提供的输出中所显示的那样。

您提供的第一个curl命令显示,您将服务mobsf用作NodePort,这意味着您能够到达您的应用程序,输入您的节点+端口的IP,就像这样的http://<NODE_IP>:8080,但是没有身份验证,因为您不是通过入口访问服务器的。

以下是所有服务类型及其工作方式:

  • ClusterIP:在集群内部IP上公开服务。选择此值使服务只能从集群中访问。这是默认的ServiceType
  • NodePort:在静态端口( NodePort)上公开每个节点的IP上的服务。自动创建ClusterIP服务( NodePort服务路由到的)。您可以通过请求NodePort,从集群外部与<NodeIP>:<NodePort>服务联系。
  • LoadBalancer:使用云提供商的负载均衡器对外公开服务。自动创建外部负载均衡器路由的NodePortClusterIP服务。

如何在裸金属安装中使用LoadBalancer和in?

Nginx 文档展示了如何设置MetalLB以允许裸金属集群使用LoadBalancer服务。

MetalLB为不在受支持的云提供商上运行的Kubernetes集群提供了网络负载平衡器实现,从而有效地允许在任何集群中使用LoadBalancer服务。

基本上,设置很简单:

代码语言:javascript
复制
kubectl apply -f https://raw.githubusercontent.com/google/metallb/v0.8.3/manifests/metallb.yaml

然后创建一个ConfigMap来配置:-根据yout网络编辑ip范围

代码语言:javascript
复制
apiVersion: v1
kind: ConfigMap
metadata:
  namespace: metallb-system
  name: config
data:
  config: |
    address-pools:
    - name: default
      protocol: layer2
      addresses:
      - 192.168.1.240-192.168.1.250 <= EDIT IP RANGE

检查安装输入kubectl get pods -n metallb-system,这是一个预期的输出:

代码语言:javascript
复制
$ kubectl get pods -n metallb-system
NAME                          READY   STATUS    RESTARTS   AGE
controller-65895b47d4-6wzfr   1/1     Running   0          9d
speaker-v52xj                 1/1     Running   0          9d

在安装和配置MetalLB之后,您应该能够使用您的入口和负载平衡器服务。

这里有一个如何设置服务(ClusterIP)和侵入的示例:

代码语言:javascript
复制
apiVersion: v1
kind: Service
metadata:
  name: mobsf
spec:
  selector:
    app: mobsf
  ports:
    - protocol: TCP
      port: 8000
      targetPort: 8000
---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: mobsf-ing
  namespace: default
  annotations:
    nginx.ingress.kubernetes.io/auth-type: basic
    nginx.ingress.kubernetes.io/auth-secret: basic-auth
    nginx.ingress.kubernetes.io/auth-realm: 'Authentication Required - foo'
spec:
  rules:
  - host: worker1.mydomain.local
    http:
      paths:
      - path: "/"
        backend:
          serviceName: mobsf
          servicePort: 8000
      - path: "/api/v1"
        backend:
          serviceName: mobsf
          servicePort: 8080

使用命令kubectl get ing检查您的入口,并在EXTERNAL-IP列中查找。

之后,请确保在本地DNS中配置指向上述ip的worker1.mydomain.local条目。

请告诉我这是否有帮助

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60294885

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档