【问题标题】:Replacing ip address in kubernetes with custom name用自定义名称替换 kubernetes 中的 IP 地址
【发布时间】:2020-08-27 10:02:26
【问题描述】:

我创建了一个示例 Spring Boot 应用程序并执行了以下操作:-

1.创建一个docker镜像

2.创建了一个 Azure 容器注册表并对此进行了 docker push

3.在 Azure Kubernetes 服务中创建集群并成功部署。我为此选择了外部端点选项。

Kubernetes external end point

说服务到服务调用我不想使用像http://20.37.134.68:80 这样的 IP 但另一个自定义名称我该怎么做? 另外,如果我选择内部,那么有什么方法可以替换名称。 尝试使用端点名称属性编辑 YAML,但失败了。有什么想法吗?

【问题讨论】:

  • 你遇到了什么错误?
  • 通过“更改名称”我假设您的意思是您想为该 IP 地址分配一个 DNS 名称?!
  • 好的,让我解释一下。如果我需要一个自定义域,那么我需要注册 rt.say 如果我的 ext 端点是 1.1.1.1 然后1.1.1.1/myapi 为我运行。我想要的是这个 pod我已经部署应该有theapp/myapi 其中应用程序-->自定义名称。原因我可能需要使用它来调用服务来服务调用。我尝试了 nginx 控制器但面临某些问题。有更好的方法吗?

标签: azure kubernetes azure-aks


【解决方案1】:

我认为你混淆了一些概念,所以我会尝试解释并帮助你达到你想要的。

  1. 当您在 Kubernetes 集群中部署容器镜像时,大多数情况下您将使用 poddeployment 规范,这基本上是一个包含所有部署/pod 配置、名称、镜像名称等的 yaml 文件. 下面是一个简单的 echo-server 应用示例:
apiVersion: apps/v1
kind: Deployment
metadata:
  name: echo
spec:
  selector:
    matchLabels:
      app: echo
  template:
    metadata:
      labels:
        app: echo
    spec:
      containers:
      - name: echo
        image: mendhak/http-https-echo
        ports:
        - name: http
          containerPort: 80

观察文件中的字段name。您可以在此处为部署和容器配置名称。

  1. 为了公开您的应用程序,您需要使用service。服务可以是internalexternalHere你可以找到所有的服务类型。

对于内部服务,您需要使用服务类型ClusterIP(默认),这意味着只有您的集群会到达 Pod。要从其他 pod 访问您的服务,您可以使用由 my-svc.my-namespace.svc.cluster-domain.example 组成的 service name

以下是上述部署的服务示例:

apiVersion: v1
kind: Service
metadata:
  name: echo-svc
spec:
  selector:
    app: echo
  ports:
    - protocol: TCP
      port: 80
      targetPort: 80
  1. 要在外部公开您的服务,您可以选择使用服务类型NodePortLoadBalancer 或使用ingress

您可以在入口规则中配置您的 DNS 名称并根据需要制定路径规则,甚至可以为您的应用程序配置 HTTPS。 Kubernetes 中的入口选项很少,其中最受欢迎的选项之一是nginx-ingress

这是一个如何为我们的示例服务配置简单入口的示例:

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  annotations:
    kubernetes.io/ingress.class: nginx
    nginx.ingress.kubernetes.io/use-regex: "false"
  name: echo-ingress
spec:
  rules:
  - host: myapp.mydomain.com
    http:
      paths:
      - path: "/"
        backend:
          serviceName: echo-svc
          servicePort: 80

在示例中,我使用 dns 名称 myapp.mydomain.com,因此这意味着您只能通过此名称访问您的应用程序。

创建入口后,可以通过kubectl get ing命令查看外部ip,并可以在你的dns服务器中创建一个A入口。

【讨论】:

    猜你喜欢
    • 2012-11-07
    • 2015-04-11
    • 2017-05-24
    • 2015-11-11
    • 2020-05-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-13
    相关资源
    最近更新 更多